【问题标题】:problems with cmake and boost-signalscmake 和升压信号的问题
【发布时间】:2014-04-29 05:15:50
【问题描述】:

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

我可以使用链接器指令集(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:

   $ 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

【问题讨论】:

  • 你能告诉我们整个链接器命令行吗?我想知道你是否添加了 -lboost_signals。

标签: c++ linux cmake


【解决方案1】:

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

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

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

add_definitions(-DBOOST_ALL_NO_LIB)

请注意,Boost Signals 已被弃用并被 Signals2 取代,它实际上是一个仅包含头文件的库。如果由您决定,consider using Signals2 instead

【讨论】:

  • 很好。我有 target_link_libraries,但我只列出了一些 boost 库,如 ${Boost_FILESYSTEM_LIBRARY}。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多