2017-05-17 471 views
-1

您好編譯libgta 1.0.8我試圖編譯libgta 1.0.8 ubuntu上16.04 這發生:(上端)錯誤ubuntu上16.04

[email protected]:~/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 

我已經加入-fPIC標誌來生成文件(CFLAGS = -g -O2 -fPIC)和它仍然不工作!

請幫助我。

回答

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的成員建立 共享庫(你正在嘗試做的),因爲任何對象文件 可以在共享庫中鏈接,必須已經用位置無關代碼編譯;並建議您使用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 
... 

your're好。萬一你沒有一個那麼:

sudo apt-get install libbz2-1.0 

在發現或安裝共享libbz2,刪除靜態libbz2.a,你有 /usr/local/lib/,然後嘗試重新libgta構建。

+0

謝謝!它幫助了很多 – John