在ubuntu 16.04上编译libgta 1.0.8时出错
嗨,我试着在ubuntu 16.04上编译libgta1.0.8 这发生了:(在终点站) 我已经在Makefile中添加了在ubuntu 16.04上编译libgta 1.0.8时出错,ubuntu,gcc,makefile,compilation,Ubuntu,Gcc,Makefile,Compilation,嗨,我试着在ubuntu 16.04上编译libgta1.0.8 这发生了:(在终点站) 我已经在Makefile中添加了-fPIC标志(CFLAGS=-g-O2-fPIC),但它仍然不工作 请帮帮我 /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; \ reco
-fPIC
标志(CFLAGS=-g-O2-fPIC
),但它仍然不工作
请帮帮我
/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
的成员
共享库(您正在尝试这样做),因为
可以链接在共享库中,必须编译有位置无关的代码;它建议您使用fPIC重新编译bzlib.o
实现这一目标的选择。(然后需要重新创建静态库libbz2.a
包含新构建的bzlib.o
)
设置您的CFLAGS=-g-O2-fPIC
不会有帮助,因为这只会
影响正在编译的目标文件;不是已编译的对象文件
您只是从libbz2.a
但是您不需要重建libbz2.a
。您只需让链接器找到
共享而非静态版本的libbz2
,即libbz2.so
而不是libbz2.a
您的Ubuntu 16.04系统上很可能已经安装了共享版本的libbz2
。看见
什么:
报告。如果类似于:
...
/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
构建。谢谢!这帮了大忙
...
/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