我有一個從Windows移植到Linux的應用程序,一切正常,但... 我們的客戶在Debian 3.1(sarge)上運行的應用程序,我無法強制目標上的gcc版本系統,我更喜歡使用新的gcc(有一些C++ 11結構,我想保留)。我想爲將來的測試和.so文件製作可執行文件。鏈接整個程序靜態
我決定靜態編譯我的過程。
當我運行:
g++ -static -o prog obj/sublib1/file1.o obj/sublib1/file2.o obj/sublib2/file1.o obj/sublib2/file2.o (...) -L../somedir -s -lsomestaticlib
我得到連接錯誤:
/usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/bin/ld: cannot find -lm
/usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/bin/ld: cannot find -lc
該系統了OpenSuse 13.1 32位,UNAME -a:
Linux linux-zfaz.site 3.11.6-4-desktop #1 SMP PREEMPT Wed Oct 30 18:04:56 UTC 2013 (e6d4a27) i686 i686 i386 GNU/Linux
這個問題可能是與數學庫和C庫。兩個庫的動態版本都位於/ lib目錄中。
(可能並不重要:我試圖使用代碼::塊來構建它,但是當問題發生了,我搬到終端)
我是否需要安裝這些庫的靜態版本?怎麼樣?
此解決方案在舊版Debian中出現錯誤:'./prog:/lib/libgcc_s.so.1:版本'GCC_4.2.0'找不到(需要./sarmata_C++)'。同時使用'-static-libstdC++'和'-static-libgcc'會給我:'./prog:重定位錯誤:./prog:undefined symbol:_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE' – entro
你不需要'-static_libgcc',至少在Linux系統(可能無處)。出於各種歷史原因,除非我錯了,'libgcc'還涵蓋了傳統的'libc',它永遠不應該被靜態鏈接。至於其他方面,我也遇到過版本問題。我認爲它與g ++和libstdC++的安裝方式有關,但我從來沒有機會跟進並找出答案。 (請注意,對'-static-libstdC++'的支持是非常新的;舊版本的g ++/libstdC++可能不支持它,或者可能不支持它。) –