gpt4 book ai didi

c++ - cmake 和 boost-signals 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:05 24 4
gpt4 key购买 nike

我将 cmake 用于带有 boost 的项目,我已经根据需要设置了 boost-signals 并且 cmake 声明它找到了它,但是当我编译项目时我遇到了链接错误。

我可以使用链接器指令 set(CMAKE_EXE_LINKER_FLAGS -lboost_signals) 解决它,但是这似乎与它应该做的事背道而驰。有人可以建议更好的方法吗?谢谢

在 CMakeLists.txt 中

   IF(UNIX)
find_package(Boost COMPONENTS system filesystem random regex signals thread program_options date_time REQUIRED)

INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} )

ENDIF()

运行命令:

   $ cmake ../
-- Boost version: 1.49.0
-- Found the following Boost libraries:
-- system
-- filesystem
-- random
-- regex
-- signals
-- thread
-- program_options
-- date_time
-- Configuring done
-- Generating done
-- Build files have been written to: /home/me/myproject/build

链接器错误:

/usr/bin/ld: /usr/local/lib/libwt.so: undefined reference to symbol '_ZN5boost7signals9trackableD2Ev'
/usr/bin/ld: note: '_ZN5boost7signals9trackableD2Ev' is defined in DSO /usr/lib/libboost_signals.so.1.49.0 so try adding it to the linker command line
/usr/lib/libboost_signals.so.1.49.0: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status

最佳答案

Boost Signals 不是一个只有 header 的库。除了提供包含目录外,您还需要告诉 CMake 链接到它。

add_executable(MyProgram [...] )
target_link_libraries(MyProgram ${Boost_LIBRARIES})

如果您也计划在 Windows 上构建,您可能还想禁用自动链接:

add_definitions(-DBOOST_ALL_NO_LIB)

请注意,Boost Signals 已被弃用并替换为 Signals2 ,这实际上是一个只有头文件的库。如果由您做出选择,consider using Signals2 instead .

关于c++ - cmake 和 boost-signals 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22565518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com