我正在使用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 回答
您需要告诉链接器链接Boost.Filesystem和Boost.System库 .
你可以做:
或者如果您只想链接
find_package(Boost...)
调用中指定的所有库,您可以执行以下操作:有关
FindBoost
CMake模块的更多详细信息,请参阅the docs或运行: