您好我尝试在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
标志,但它仍无效!
请帮助我。
答案 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.so
比libbz2.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
版本。