原创文章,转载请正确注明本文原始URL及作者。

今天要编译一个zookeeper的C接口,要编译一个TK1版本。

事情经过这这样的:
原来用的是zookeeper-3.4.6版本,但是源码中有个函数是汇编代码,指令不兼容,编译不过。
这里折腾了好久,还准备读懂代码写个C代码替换,结果官方已经修改了这个问题了。

下载了源码包 zookeeper-trunk.zip

里面没有configure,需要生成configure ,按照README和INSTALL来做。

这里折腾了好久,又是需要ant,又是需要autoreconf的,而且TK1上还没有这些工具,在PC上也总有错。

有到网上找了个版本
zookeeper-3.5.1-alpha.tar.gz
里面带有configure,哈哈,好用,直接放到TK1板子上编译出了 libzookeeper_mt 。
看来trunk上的代码需要大神才能编译啊,没有带configure,需要autoconf,一般人不会用。

然后把 libzookeeper_mt 考到我的交叉编译的虚拟机上,编译我的mq,结果报错:
Linking CXX executable ../bin/linux_arm_tk1/testor
/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/bin/ld: warning: ld-linux.so.3, needed by /usr/lib/gcc/arm-linux-gnueabihf/4.6/libstdc++.so, not found (try using -rpath or -rpath-link)
/home/xxx...xxx/libzookeeper_mt.so: undefined reference to `__poll_chk@GLIBC_2.16'
collect2: ld 返回 1

是因为 libzookeeper_mt 从TK1板子上编译,而现在我从虚拟机编译依赖这个库,估计是版本问题。
在TK1上用make编译是可以的,但我们的工程是cmake组织的,编译都是用的虚拟机,看来还是需要从虚拟机重新编译个 libzookeeper_mt 。

从虚拟机交叉编译zookeeper
./configure --host=arm-linux-gnueabihf
报错:
checking that generated files are newer than configure... done
configure: creating ./config.status
./config.status: line 2300: syntax error: unexpected end of file
这个错误真是太奇怪了,每次自动生成这个文件,还生成的有错。

最后无怒了,不用它生成了,我自己从命令行编译吧。

最后是这样解决了问题:
在TK1上有编译一遍,复制出编译过程中的编译选项。
找到TK1生成的静态库,把.o列表显示出来。
然后自己在虚拟机中写脚本,按照它的编译选项编译.o对应的源码,终于可以用了!

原创文章,转载请正确注明本文原始URL及作者。

交叉编译zookeeper的C库的更多相关文章

  1. Linux学习笔记——怎样在交叉编译时使用共享库

    0.前言     在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这样的情况下便会产生下面疑问,比如:     [1]交叉编译时的共享库是否须要放置于目标板中,假设须要放置在哪个文件 ...

  2. 交叉编译多平台 FFmpeg 库并提取视频帧

    原文地址: 交叉编译多平台 FFmpeg 库并提取视频帧 交叉编译多平台 FFmpeg 库并提取视频帧 本文档适用于 x86 平台编译 armeabi.armeabi-v7a.arm64-v8a.x8 ...

  3. 交叉编译多平台 FFmpeg 库并提取视频帧(转)

    交叉编译多平台 FFmpeg 库并提取视频帧 转  https://www.cnblogs.com/leviatan/p/11142579.html 本文档适用于 x86 平台编译 armeabi.a ...

  4. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...

  5. Linux学习笔记——如何使用共享库交叉编译

    0.前言     在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这样的情况下便会产生下面疑问,比如:     [1]交叉编译时的共享库是否须要放置于目标板中,假设须要放置在哪个文件 ...

  6. 基于ZooKeeper的分布式锁和队列

    在分布式系统中,往往需要一些分布式同步原语来做一些协同工作,上一篇文章介绍了Zookeeper的基本原理,本文介绍下基于Zookeeper的Lock和Queue的实现,主要代码都来自Zookeeper ...

  7. ZooKeeper开发手册中文翻译(转)

    本文Github地址:https://github.com/sundiontheway/zookeeper-guide-cn 本文假设你已经具有一定分布式计算的基础知识.你将在第一部分看到以下内容: ...

  8. NeuSoft(1)构建嵌入式交叉编译环境

    操作系统版本:ubuntu 12.04 内核名称:Linux 内核发行版:3.2.0-generic 内核版本:#50-Ubuntu SMP Mon Sep 12 21:18:14 UTC 2011 ...

  9. ZooKeeper学习第六期---ZooKeeper机制架构

    一.ZooKeeper权限管理机制 1.1 权限管理ACL(Access Control List) ZooKeeper 的权限管理亦即ACL 控制功能,使用ACL来对Znode进行访问控制.ACL的 ...

随机推荐

  1. Javascript中的原型、原型链(十)

    一.原型 每当创建一个函数时,函数就会包含一个prototype属性,这个属性其实相当于一个指针,指向调用该构造函数创建的对象原型. 这个对象原型里面有一个constructor属性,这个属性又指向构 ...

  2. 组合(composite)模式

    定义 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性 组合模式(Composite)将小对象组合成树形结构,使用户操作组合对象如同操作一个单个对象.组 ...

  3. js实现照片墙效果

    本次要实现的是一个照片墙的效果,如下图,很多图片随机的摆放在窗口中,当点击到某一张的时候,该张图片出现出现在窗口的水平垂直居中的位置. 首先,我们需要简单的结构处理图片,为了方便操作,引用了一个js库 ...

  4. [UE4]对象

    类型和类 1.类型,Type,代表了数据含义,程序员可以对数据进行哪些操作.如果是整数,就可以进行加减乘除:如果是字符串,可以进行打印.连接.但不能对字符串进行加减乘除. 2.类,class,自定义类 ...

  5. 第二章:安装zabbix过程

    2.2 安装zabbix过程 2.2.1 安装方式选择 编译安装 (服务较多,环境复杂) yum安装(干净环境) 使用yum 需要镜像yum源 http://www.cnblogs.com/clsn/ ...

  6. SSH配置文件详解

    SSH:是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能. 在RHEL系统中SSH使用的是OpenSSH服务器,由opensh,openssh-server等软件包提供的. sshd ...

  7. 可变卷积Deforable ConvNet 迁移训练自己的数据集 MXNet框架 GPU版

    [引言] 最近在用可变卷积的rfcn 模型迁移训练自己的数据集, MSRA官方使用的MXNet框架 环境搭建及配置:http://www.cnblogs.com/andre-ma/p/8867031. ...

  8. 第8课 列表初始化(3)_防止类型收窄、explicit关键字

    1. 防止类型收窄 (1)类型收窄:指的是导致数据内容发生变化或者精度丢失的隐式类型转换. (2)类型收窄的几种情况: ①从浮点数隐式转换为整型数,如int i=2.2; ②从高精度浮点数隐式转换为低 ...

  9. Windows下sbt安装配置

    1.下载sbt1.2.8 官网:https://sbt-downloads.cdnedge.bluemix.net/releases/v1.2.8/sbt-1.2.8.tgz 2.配置环境 #SBT_ ...

  10. go 数据类型type尝试

    package main import "fmt" import "encoding/json" type Human struct{ Name string ...