我最近从visual studio 2010 express切换到使用NetBeans,我已经对布局和简单性印象深刻,尽管它确实需要一些推动才能正确编译。但是,我还有另外一个问题。当我测试看看boost是否也能正常工作时,我将文件boost / signals.hpp包含在main.cpp中,然后转到项目选项中的其他库目录并添加了我的boost安装的lib目录,如同我会在视觉工作室做。毕竟,无论如何,我得到了一堆未定义的引用。
我正在使用带有msys的mingw编译器,如果这有任何区别,我的升级版本为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
编辑:
尝试通过项目属性中的“添加库”对话框手动添加所需的lib文件后,我收到此错误。
"/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 :(得分:1)
这取决于您构建项目的方式。
如果您从现有的makefile构建项目,那么库路径和库应该存在于构建环境中。
如果您通过单独修改源代码,包含和库来手动构建项目,则需要显式添加所需的库。
具体来说,查看更新后的构建日志,您似乎不是链接所需的库,而是以某种方式将其添加为目标。
右键单击您的项目,转到Properties
,在Build
标签下查看Linker
,您可以在此处指定链接路径和动态/静态库。
答案 1 :(得分:0)
经过几个小时的谷歌搜索和阅读,我发现了一些关于提升的信息,最终找到并理解了我的问题。当我最初获得我的boost安装时,它来自BoostPro,其中包含所有仅头文件对象,以及仅用于vc ++的预编译二进制文件。在获得最新版本的boost和boost.build以创建库的gcc版本并链接它们之后,它顺利运行。感谢Tyler Jandreau和Joachim Pileborg回答我本来存在的有缺陷的问题:。