首页 文章

使用cygwin上的cmake链接到Boost文件系统时出错

提问于
浏览
3

我正在使用cmake 2.8.9,g 3.4.4和Boost 1.50 . 在Windows 8 64位的Cygwin中 . 这是我收到的错误消息 .

链接CXX可执行文件RayTracer.exe CMakeFiles / RayTracer.dir / Ray_Tracer.cpp.o:Ray_Tracer.cpp :( . text 0x89c):未定义的引用boost :: system :: generic_category()'CMakeFiles / RayTracer.dir / Ray_Tracer . cpp.o:Ray_Tracer.cpp :( . text 0x8a6):undefined reference toboost :: system :: generic_category()'CMakeFiles / RayTracer.dir / Ray_Tracer.cpp.o:Ray_Tracer.cpp :( . text 0x8b0):undefined reference to boost :: system :: system_category()'/ usr / lib / gcc / i686-pc-cygwin /4.5.3 /../../../../ i686-pc-cygwin/bin/ld: CMakeFiles / RayTracer.dir / Ray_Tracer.cpp.o:错误的reloc地址0xb在.text $ _ZN5boost6system14error_categoryD1Ev [boost :: system :: error_category :: ~error_category()]'collect2:ld返回1退出状态CMakeFiles / RayTracer.dir /build.make:94:目标RayTracer.exe的配方'失败make [2]:*** [RayTracer.exe]错误1 CMakeFiles / Makefile2:64:目标CMakeFiles / RayTracer.dir / all的配方失败make [ 1]:* [CMakeFiles / RayTracer.dir / all]错误2 Makefile:75:目标`all'失败的配方make:* [全部]错误2

从我所看到的,通常的问题是无法链接升压系统库,但我确保这样做 . 这是我的CMakeLists.txt文件的相关部分:

#Edit: cmake can't find the static libraries on cygwin, so I'm setting this to false for now.
SET(Boost_USE_STATIC_LIBS FALSE)

FIND_PACKAGE(Boost 1.50 REQUIRED date_time program_options thread filesystem system unit_test_framework)
IF(${Boost_FOUND})
  INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ENDIF()
add_executable(RayTracer
    Ray_Tracer.cpp
)
target_link_libraries(RayTracer ${Boost_PROGRAM_OPTIONS_LIBRARIES})

这是我的.cpp文件中触发错误的行:

#include <boost/filesystem.hpp>

知道我做错了什么吗?

1 回答

  • 2

    您需要告诉链接器链接Boost.Filesystem和Boost.System库 .

    你可以做:

    target_link_libraries(RayTracer
                          ${Boost_PROGRAM_OPTIONS_LIBRARIES}
                          ${Boost_FILESYSTEM_LIBRARIES}
                          ${Boost_SYSTEM_LIBRARIES}
                          )
    

    或者如果您只想链接 find_package(Boost...) 调用中指定的所有库,您可以执行以下操作:

    target_link_libraries(RayTracer ${Boost_LIBRARIES})
    

    有关 FindBoost CMake模块的更多详细信息,请参阅the docs或运行:

    cmake --help-module FindBoost
    

相关问题