我正在使用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 :(文字+ 0x89c): 对
boost::system::generic_category()' CMakeFiles/RayTracer.dir/Ray_Tracer.cpp.o:Ray_Tracer.cpp:(.text+0x8a6): undefined reference to
boost :: system :: generic_category()'的未定义引用 CMakeFiles / RayTracer.dir / Ray_Tracer.cpp.o:Ray_Tracer.cpp :(文字+ 0x8b0): 对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: bad reloc address 0xb in section
的未定义引用.text $ _ZN5boost6system14error_categoryD1Ev [boost :: system :: error_category :: ~error_category()]' collect2:ld返回1退出状态 CMakeFiles / RayTracer.dir / build.make:94:目标配方RayTracer.exe' failed make[2]: *** [RayTracer.exe] Error 1 CMakeFiles/Makefile2:64: recipe for target
CMakeFiles / RayTracer.dir / all'失败make [1]: * [CMakeFiles / RayTracer.dir / all]错误2 Makefile:75:目标的配方 'all'失败了make:* [all]错误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>
知道我做错了吗?
答案 0 :(得分: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