2013-02-08 116 views
0

我最近從visual studio 2010 express切換到使用NetBeans,並且我已經對佈局和簡單性留下了非常深刻的印象,儘管它確實需要一些微調來編譯對。但是,我有另一個問題。當我測試了boost是否也能工作的時候,我在main.cpp中包含了boost/signals.hpp文件,然後去了項目選項中的其他庫目錄,並添加了我的boost安裝的lib目錄,與我會在視覺工作室做。畢竟,我得到了一堆未定義的參考資料。C++ Netbeans 7.2.1正確鏈接boost庫

我使用mingw編譯器與msys和我有助推版本1.47,如果這有什麼區別。我可以確認,使用Visual Studio時,同樣的boost提升工作正常。

這是構建日誌。

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
make[1]: Entering directory m`/c/Users/me/Documents/NetBeansProjects/Syncopate5/Syncopate5' 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/syncopate5.exe 
make[2]: Entering directory `/c/Users/me/Documents/NetBeansProjects/Syncopate5/Syncopate5' 
mkdir -p dist/Debug/MinGW-Windows 
g++.exe  -o dist/Debug/MinGW-Windows/syncopate5 build/Debug/MinGW-Windows/main.o -L/C/Program\ Files\ \(x86\)/boost/boost_1_47/lib 
build/Debug/MinGW-Windows/main.o: In function `ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_8functionIFvvEEEED2Ev': 
C:\Users\me\Documents\NetBeansProjects\Syncopate5\Syncopate5/../../../../../../Program Files (x86)/boost/boost_1_47/boost/signals/signal_template.hpp:139: undefined reference to `boost::signals::trackable::~trackable()' 
C:\Users\me\Documents\NetBeansProjects\Syncopate5\Syncopate5/../../../../../../Program Files (x86)/boost/boost_1_47/boost/signals/signal_template.hpp:139: undefined reference to `boost::signals::detail::signal_base::~signal_base()' 
make[2]: Leaving directory `/c/Users/me/Documents/NetBeansProjects/Syncopate5/Syncopate5' 
C:\Users\me\Documents\NetBeansProjects\Syncopate5\Syncopate5/../../../../../../Program Files (x86)/boost/boost_1_47/boost/signals/signal_template.hpp:139: undefined reference to `boost::signals::detail::signal_base::~signal_base()' 
make[1]: Leaving directory `/c/Users/me/Documents/NetBeansProjects/Syncopate5/Syncopate5' 
build/Debug/MinGW-Windows/main.o: In function `ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_8functionIFvvEEEEC2ERKS2_RKS4_': 
C:\Users\me\Documents\NetBeansProjects\Syncopate5\Syncopate5/../../../../../../Program Files (x86)/boost/boost_1_47/boost/signals/signal_template.hpp:197: undefined reference to `boost::signals::detail::signal_base::signal_base(boost::function2<bool, boost::signals::detail::stored_group, boost::signals::detail::stored_group> const&, boost::any const&)' 
C:\Users\me\Documents\NetBeansProjects\Syncopate5\Syncopate5/../../../../../../Program Files (x86)/boost/boost_1_47/boost/signals/signal_template.hpp:197: undefined reference to `boost::signals::detail::signal_base::~signal_base()' 
collect2.exe: error: ld returned 1 exit status 
make[2]: *** [dist/Debug/MinGW-Windows/syncopate5.exe] Error 1 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 

編輯:

試圖通過手動附加庫項目屬性對話框添加所需的庫文件後,我收到此錯誤。

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
make[1]: Entering directory `/c/Users/me/Documents/NetBeansProjects/Syncopate5/Syncopate5' 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/syncopate5.exe 
make[2]: Entering directory `/c/Users/me/Documents/NetBeansProjects/Syncopate5/Syncopate5' 
make[2]: *** No rule to make target `../../../../../../Program Files \(x86\)/boost/boost_1_47/lib/libboost_signals-vc100-mt-1_47.lib', needed by `dist/Debug/MinGW-Windows/syncopate5.exe'. Stop. 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 
make[2]: Leaving directory `/c/Users/me/Documents/NetBeansProjects/Syncopate5/Syncopate5' 
make[1]: Leaving directory `/c/Users/me/Documents/NetBeansProjects/Syncopate5/Syncopate5' 

BUILD FAILED (exit value 2, total time: 9s) 
+0

您已經告訴NetBeans哪裏有_find_ Boost庫,但不是實際與任何鏈接。 –

+0

那麼我會如何指導它呢?爲什麼我從來不需要在視覺工作室做到這一點? – FatalCatharsis

+1

項目屬性中的某處應該有一個可以添加庫的字段,您應該添加的是'boost_signals'。您設法添加庫搜索文件夾(在提供的日誌中的鏈接器命令行中看到的「-L」參數),這些庫也應該位於該頁面上。至於Visual Studio,如果你想鏈接一個非標準的庫(比如Boost庫),你也需要手動添加它們。 –

回答

0

經過數小時的谷歌搜索和閱讀,我發現了一些關於提升,最終找到並理解我的問題。當我最初獲得我的boost的安裝時,它來自BoostPro,它擁有所有僅包含頭文件的對象,以及僅用於vC++的預編譯二進制文件。在獲得最新版本的boost之後,boost.build創建這些庫的gcc版本並鏈接到它們之後,它的運行順利。感謝泰勒Jandreau一個約阿希姆Pileborg回答我天生有缺陷的問題:。

1

這取決於您如何構建項目。

如果您從現有的生成文件構建項目,則您的庫路徑和庫應存在於生成環境中。

如果您是通過單獨對源代碼,包含代碼和庫進行分段構建項目,則需要明確地添加所需的庫。

特別是,看着你的更新版本日誌,看起來你不是鏈接所需的庫,而是以某種方式添加它作爲目標。

右鍵點擊你的項目,進入Properties,在Build標籤下尋找Linker,這裏是你應該指定鏈接路徑和動態/靜態庫的地方。

+0

我承認我真的不太瞭解編譯過程本身。我不知道makefile的重要性是什麼,或者它的目的。當我創建項目時,我選擇了爲我生成makefile的C/C++應用程序項目。然後我在源文件夾中創建了一個main.cpp,其中包括boost/signals.hpp,並嘗試通過項目設置進行鏈接,通過properties-> build-> linker並將其他庫目錄設置爲boost_1_47/lib,然後選擇按鈕旁邊的庫和位於該庫。我做了什麼/沒有做對嗎? – FatalCatharsis

+0

我不確定。看起來你已經完成了所有設置項目的工作。您是否添加了「Library ...」或「Library File ...」? –

+0

我已經嘗試了兩種,我也試過了兩個不同版本的文件,.lib和.dll。我之前在安裝mingw時遇到了一些麻煩。當我從他們的網站上運行下載並告訴它也包含msys時,msys文件夾沒有make.exe,因此我卸載了整個系統,然後分別安裝了mingw和msys,並在c: \ msys \ 1.0 \ bin \ make.exe作爲netbeans的make命令。這讓我建立了一個很好的世界。這個改變可能與我的問題有關嗎?就像我說的,我對makefiles不太瞭解:\。 – FatalCatharsis