在ubuntu 16.04上编译libgta 1.0.8时出错

在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

嗨,我试着在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; \
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