2013-02-08 76 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