2013-10-05 136 views
2

我想在Ubuntu 12.04 64位上構建一個特定的程序。程序需要編譯32位。聯動失敗,發生了什麼事?

我安裝了ia32-libsgcc-multilib包。

我設法在3臺不同的計算機上編譯它,但是在這個計算機上,它失敗了,出現了一個奇怪的錯誤。 出於某種原因,libm.so沒有正確拾取,或者庫有問題。

這是實際的編譯行失敗,因爲它是從Makefile中提取的。

gcc -o x86_32_obj/foo x86_32_obj/foomain.o -m32 -fPIC -fno-stack-protector -lc -lgcc -lm -lpthread -lrt -lstdc++ ../libfoo/lib/./libfii.x86_32.a 

這是我見過的錯誤輸出

/usr/bin/ld: ../libfoo/lib/./libfoo.x86_32.a(NK_Meas.o): undefined reference to symbol '[email protected]@GLIBC_2.0' 
/usr/bin/ld: note: '[email protected]@GLIBC_2.0' is defined in DSO /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib32/libm.so so try adding it to the linker command line 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib32/libm.so: could not read symbols: Invalid operation 
collect2: ld returned 1 exit status 
make[1]: *** [foo] Error 2 
make: *** [foo] Error 2 

回答

0

發現問題。 顯然,我鏈接的庫文件是使用不同版本的GCC編譯的。 我不知道它是如何相關的,但是一旦我將gcc編譯器替換爲與它工作的庫一起使用的編譯器。

2

如這相對於linking order。通過將libm鏈接指令放置在鏈接配置的end上,可以解決錯誤。

這些相互依賴性非常依賴於系統,這可能是爲什麼相同的命令可以在其他系統上工作。

+0

不幸的是,這不是問題,我試過所有可能的順序,我仍然得到這個錯誤。 – stdcall