2013-02-21 43 views
1

我已經安裝了建立使用Boost項目與ArchLinux的

extra/boost 1.52.0-1 
extra/boost-libs 1.52.0-1 

與ArchLinux的下吃豆子。我正在嘗試構建使用Boost庫的一部分的autotools C++項目。它們已經在Ubuntu 12.04下成功通過測試和構建。與安裝libboost-all-dev包。使用ArchLinux ./configure可以正常工作,編譯過程(make)也可以工作。然而,鏈接似乎存在問題:

libtool: link: g++ -g -O2 -Wall -Wextra -o ssbmc smtparser.o ... 
../contrib/cudd 2.4.2/obj/.libs/libobj.a ... 
-lboost_program_options-mt -lboost_iostreams-mt -lgmp -lgmpxx -lm -lz 
/usr/bin/ld: cannot find -lboost_program_options-mt 
/usr/bin/ld: cannot find -lboost_iostreams-mt 

任何想法爲什麼會失敗?由於源使用Boost庫函數,並且編譯文件不會失敗,所以標題似乎在那裏。

的庫有:

$ ls /usr/lib/ | grep program 
libboost_program_options.a 
libboost_program_options.so 
libboost_program_options.so.1.52.0 
$ ls /usr/lib/ | grep iostreams 
libboost_iostreams.a 
libboost_iostreams.so 
libboost_iostreams.so.1.52.0 

他們是否要改名?

+0

嘗試的搜索中,希望* -mt文件!也許它是硬編碼的? – uzsolt 2013-02-23 20:23:32

回答

2

這似乎這樣的伎倆:用於與就足夠顯示他們所建立的架構被稱爲

$sudo ln -s libboost_program_options.so libboost_program_options-mt.so 
$sudo ln -s libboost_iostreams.so libboost_iostreams-mt.so 
1

Boost庫。例如,-mt表示「多線程」或「以線程感知模式構建」。據我所知,現在Linux上沒有遵循這個約定,並且庫默認沒有這個後綴(儘管它們仍然以線程感知模式構建)。您的./configure腳本爲舊格式的鏈接器生成說明。嘗試使用bjam,如果可以的話。如果你說

bjam --layout=tagged 

你甚至可以得到你的就足夠了回來......從技術上講,你的解決方案是完全有效的,以及:)在配置腳本

+0

謝謝,但這是切換整個構建系統的一大步,我不是唯一的開發者。有穩定的autotools解決方案嗎? – joachim 2013-02-23 17:51:37