在ubuntu 16.04上编译libgta 1.0.8时出错

时间:2017-05-17 14:08:46

标签: ubuntu gcc makefile compilation

您好我尝试在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(-fPIC)中添加了CFLAGS = -g -O2 -fPIC标志,但它仍无效!

请帮助我。

1 个答案:

答案 0 :(得分:0)

/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的成员 一个共享库(你试图做),因为任何目标文件 可以在共享库中链接,必须使用与位置无关的代码进行编译;并建议您使用bzlib.o重新编译fPIC 实现这一目标的选择。 (然后你需要重新创建静态库libbz2.a 包含新构建的bzlib.o)。

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

链接

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

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

$ 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版本。