• 交叉编译zookeeper的C库


    原创文章,转载请正确注明本文原始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及作者。

  • 相关阅读:
    列表和元组
    UVM宏
    UVM中重要函数
    组合模式(composite)
    装饰器模式(Decorator)
    适配器模式(Adapter)
    桥接模式
    原型模式(prototype)
    单例模式(singleton)
    UML类图
  • 原文地址:https://www.cnblogs.com/zhaojk2010/p/5076150.html
Copyright © 2020-2023  润新知