【问题标题】:Error Compiling libgta 1.0.8 on ubuntu 16.04在 ubuntu 16.04 上编译 libgta 1.0.8 时出错
【发布时间】:2017-05-17 14:08:46
【问题描述】:

您好,我尝试在 ubuntu 16.04 上编译 libgta 1.0.8 这发生了:(在终端上)

john@john-K53SV:~/gta/libgta$ sudo make 
make  all-recursive
make[1]: Entering directory '/home/john/gta/libgta'
Making all in doc
make[2]: Entering directory '/home/john/gta/libgta/doc'
doxygen doxyfile
make  all-am
make[3]: Entering directory '/home/john/gta/libgta/doc'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/home/john/gta/libgta/doc'
make[2]: Leaving directory '/home/john/gta/libgta/doc'
Making all in src
make[2]: Entering directory '/home/john/gta/libgta/src'
  CC       gta.lo
  CCLD     libgta.la
/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S 
against `BZ2_crc32Table' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Makefile:441: recipe for target 'libgta.la' failed
make[2]: *** [libgta.la] Error 1
make[2]: Leaving directory '/home/john/gta/libgta/src'
Makefile:491: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/john/gta/libgta'
Makefile:400: recipe for target 'all' failed
make: *** [all] Error 2

我已在 Makefile (CFLAGS = -g -O2 -fPIC) 中添加了 -fPIC 标志,但它仍然无法正常工作!

请帮帮我。

【问题讨论】:

    标签: ubuntu gcc makefile compilation


    【解决方案1】:
    /usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S \
    against `BZ2_crc32Table' can not be used when making a shared object; \
    recompile with -fPIC    
    

    这个链接器诊断告诉你它不能使用目标文件bzlib.o 这是静态库/usr/local/lib/libbz2.a 的成员来构建 一个共享库(您正在尝试这样做),因为任何对象文件 可以在共享库中链接必须已经用 Position-Independent Code 编译;并建议您使用 fPIC 重新编译 bzlib.o 实现这一目标的选择。 (然后您需要重新创建静态库 libbz2.a 包含新建的bzlib.o)。

    设置您的CFLAGS = -g -O2 -fPIC 将无济于事,因为只有 影响您正在编译的目标文件;不是已经编译的目标文件 您只是从libbz2.a 链接

    但您不需要重建libbz2.a。您只需要让链接器找到 libbz2 的共享而非静态版本,即 libbz2.so 而不是 比libbz2.a.

    libbz2 的共享版本很可能已经安装在您的 Ubuntu 16.04 系统上。看 什么:

    $ locate libbz2.so
    

    报告。如果是这样的:

    ...
    /lib/x86_64-linux-gnu/libbz2.so.1
    /lib/x86_64-linux-gnu/libbz2.so.1.0
    /lib/x86_64-linux-gnu/libbz2.so.1.0.4
    ...
    

    你很好。如果万一你还没有,那么:

    sudo apt-get install libbz2-1.0
    

    找到或安装了共享libbz2,删除您在其中的静态libbz2.a /usr/local/lib/ 并再次尝试您的 libgta 构建。

    【讨论】:

    • 谢谢!帮助很大
    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 2016-12-17
    • 2013-11-21
    • 1970-01-01
    • 2016-08-30
    • 2016-12-08
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多