我是Makefiles语法的新手,我不知道如何正确链接到提升库线程定义。
在.cpp文件中,我有这个代码:
boost::thread(&MessageBus::readBus, this, _bus).detach();
我包括以下内容:
#include <boost/thread.hpp>
但是在编译时我得到以下错误,这似乎是因为链接问题:
../../../../bsl1/boost/boost/thread/detail/thread.hpp:255: undefined reference to `boost::thread::detach()'
Consolidator.o: In function `~thread_data':
../../../../bsl1/boost/boost/thread/detail/thread.hpp:93: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
../../../../bsl1/boost/boost/thread/detail/thread.hpp:93: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
Consolidator.o: In function `thread_data_base':
../../../../bsl1/boost/boost/thread/pthread/thread_data.hpp:144: undefined reference to `vtable for boost::detail::thread_data_base'
Consolidator.o: In function `thread_data':
../../../../external/bsl1/boost/boost/thread/detail/thread.hpp:111: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
Consolidator.o: In function `boost::thread::start_thread()':
../../../../bsl1/boost/boost/thread/detail/thread.hpp:180: undefined reference to `boost::thread::start_thread_noexcept()'
在Makefile中,我在CFLAGS和CXXFLAGS中添加了boost lib:
PROG = msgbusd
NO_STRIP = yes
.PATH: \
${.CURDIR}/server \
SRCS += \
main.cpp \
oc.cpp \
UdpReceiver.cpp \
${OTHER_SRCS} \
${LIB_PROTOS_SRCS} \
CXXFLAGS += \
-fpermissive \
-I${SRCTOP_EXTERNAL}/bsl1/boost
CFLAGS += \
-DBOOST_SYSTEM_NO_DEPRECATED \
-fno-inline \
-I${.CURDIR}/server \
-I${.CURDIR}/lib/h \
-I. \
-I${SRCTOP_EXTERNAL}/bsl1/boost
DPLIBS += \
${LIBXSLT} \
${LIBISC} \
${LIBBSDXML} \
${LIBXML2} \
${LIBEVENT} \
${LIBPTHREAD} \
${LIBZ}
.include <bsd.prog.mk>
我在FreeBSD 6中开发并拥有gcc 4.2。
为了能够成功编译,还需要做哪些其他更改?
已经通过this线程,并没有找到任何特定的Makefile和Makefile语法来包含boost库
这个问题是关于FreeBSD Makefiles基础设施的。如果你不是作为FreeBSD的一部分开发你的项目(我怀疑你这样做,因为FreeBSD 6很古老),你真的不需要围绕bsd.prog.mk
。我建议使用现代构建系统来完成这项任务,比如CMake。
但是,如果你真的需要使用普通的BSD Makefile,你应该定义LDFLAGS
变量并在那里传递-lboost_thread
。