Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接到带有CMake生成的MSVC9项目文件的boost库失败_Boost_Cmake_Linker Errors - Fatal编程技术网

链接到带有CMake生成的MSVC9项目文件的boost库失败

链接到带有CMake生成的MSVC9项目文件的boost库失败,boost,cmake,linker-errors,Boost,Cmake,Linker Errors,我正试图通过使用CMake创建MSVC9.0项目文件,用boost库构建一个应用程序 我得到以下错误: 错误3致命错误LNK1104:无法打开文件“libboost_system-vc90-mt-gd-1_44.lib” 这是CMake配置 cmake_minimum_required(VERSION 2.8) PROJECT( TestProject) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) set(BOOST_ROOT "D:/boost_1_4

我正试图通过使用CMake创建MSVC9.0项目文件,用boost库构建一个应用程序

我得到以下错误:

错误3致命错误LNK1104:无法打开文件“libboost_system-vc90-mt-gd-1_44.lib”

这是CMake配置

cmake_minimum_required(VERSION 2.8)
PROJECT( TestProject)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
set(BOOST_ROOT "D:/boost_1_44_0")
set(Boost_USE_MULTITHREADED ON)
FIND_PACKAGE( Boost 1.44.0 REQUIRED unit_test_framework system)

INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${BOOST_ROOT})
LINK_DIRECTORIES(${LINK_DIRECTORIES} "D:/boost_1_44_0/stage/lib")


SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
SET(RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
ADD_EXECUTABLE(testapp
main.cpp)

TARGET_LINK_LIBRARIES(testapp
${Boost_SYSTEM_LIBRARY}
)

SET_TARGET_PROPERTIES( testapp PROPERTIES DEBUG_POSTFIX "d" )
我用以下选项构建了静态和共享(调试和发布)的boost

bjam toolset=msvc  variant=debug   link=shared runtime-link=shared threading=multi --build-type=complete stage
bjam toolset=msvc  variant=release link=shared runtime-link=shared threading=multi --build-type=complete stage
bjam toolset=msvc  variant=debug   link=static runtime-link=static threading=multi --build-type=complete stage
bjam toolset=msvc  variant=release link=static runtime-link=static threading=multi --build-type=complete stage
我不确定配置中缺少了什么。有什么建议吗?
谢谢。

首先,您是否检查了您的stage dir“D:/boost\u 1\u 44\u 0/stage/lib”中是否确实存在“libboost\u system-vc90-mt-gd-1\u 44.lib”

第二:Boost和CMake的find_包(Boost)最常见的问题是对自动链接的干扰。您可以通过向编译标志添加定义来禁用它

add_definitions( -DBOOST_ALL_NO_LIB )
但是,您可能需要指定是要链接到动态版本还是静态版本

set( Boost_USE_STATIC_LIBS ON ) # or Off, depending on what you want
find_package( Boost 1.44.0 REQUIRED unit_test_framework system)

当然,您可以随时检查生成的visual studio文件,以查看哪些链接库实际添加到您的项目中。

经过多次尝试,我能够在Windows上使用Boost编译项目。 以下是CMakeLists.txt的来源:

cmake_minimum_required (VERSION 2.6)

project (SendCommand)

include_directories(./)

set(BOOST_ROOT F:/boost_1_55_0/)
set(BOOST_INCLUDEDIR F:/boost_1_55_0/)
set(BOOST_LIBRARYDIR F:/boost_1_55_0/lib32-msvc-10.0/)

set(Boost_INCLUDE_DIRS F:/boost_1_55_0/)
set(Boost_LIBRARY_DIRS F:/boost_1_55_0/lib32-msvc-10.0/)

add_definitions(-DBOOST_ALL_NO_LIB)

set(Boost_USE_STATIC_LIBS        ON)
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)

find_package(Boost 1.55.0 REQUIRED COMPONENTS system thread)

include_directories(${Boost_INCLUDE_DIRS}) 
add_executable(SendCommand send_command.cpp ivdlp_packet.cpp) 
target_link_libraries(SendCommand ${Boost_LIBRARIES})
有关更多信息,您可以使用我编写的文档:

它通过添加“添加定义(-DBOOST\u ALL\u NO\u LIB)”来解决问题。谢谢,你让我开心。欢迎光临。请注意,禁用自动链接后,您将负责在依赖项中正确链接。例如,当您使用boost_文件系统时,您需要添加对boost_系统的依赖性,方法是将其包含在find_包()和目标_link_库中。是否有解决方案使自动链接正常工作?我正试图把一棵大树推给初级开发人员,我需要构建过程是傻瓜式的。太棒了!但是你有一个打字错误,加上_definitionS@Ravenwater请尝试
--layout=versioned
谢谢您对内容进行格式化。