如何在Makefile中链接boost库?

问题描述 投票:1回答:1

我是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库

c++ gcc boost makefile freebsd
1个回答
2
投票

这个问题是关于FreeBSD Makefiles基础设施的。如果你不是作为FreeBSD的一部分开发你的项目(我怀疑你这样做,因为FreeBSD 6很古老),你真的不需要围绕bsd.prog.mk。我建议使用现代构建系统来完成这项任务,比如CMake。

但是,如果你真的需要使用普通的BSD Makefile,你应该定义LDFLAGS变量并在那里传递-lboost_thread

© www.soinside.com 2019 - 2024. All rights reserved.