LNK1104:无法打开文件“libboost_python27-vc142-mt-x64-1_71.lib”而boost_python版本是1.72

发布于 2025-01-13 11:55:36 字数 2567 浏览 4 评论 0原文

我正在使用 cmake 和 Visual Studio 2019 来构建我的项目。我的 boost 版本是 1.72,我使用 b2.exeboost_1_72_0\stage\lib 中生成了文件 libboost_python27-vc142-mt-x64-1_72.lib代码>.

我使用 cmake 生成了 .sln 文件。然后我在 Visual Studio 2019 中构建该项目。但是, 它最终出现错误LNK1104:无法打开文件'libboost_python27-vc142-mt-x64-1_71.lib'

我真的不明白为什么它要求版本1_71而不是1_72的libboost_python。我从未在任何文件中引入版本 1.71 请求。那么应该怎么样呢?我怎样才能让它发挥作用?

我的 CMakeLists.txt 文件:

project(framecore)
cmake_minimum_required(VERSION 3.20)
message(STATUS "Configuring framecore")

set(Boost_USE_STATIC_LIBS ON)
# windows 
if(MSVC)
    # this although can be set by system variable Boost_INCLUDE_DIR etc
    set(Boost_INCLUDE_DIR F:/boost_1_72_0)
    set(Boost_LIBRARY_DIR F:/boost_1_72_0/stage/lib)
endif()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(PythonLibs 2.7 REQUIRED)
find_package(Boost REQUIRED COMPONENTS system)
find_package(Boost REQUIRED COMPONENTS container)
find_package(Boost REQUIRED COMPONENTS python27)

file(GLOB_RECURSE SRC src/core/*.cpp
        src/wraps/*.cpp)

file(GLOB_RECURSE SRC_HEADER src/core/*.hpp
        src/core/*.h
        src/wraps/*.hpp
        src/wraps/*.h)

include_directories(src)
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${PYTHON_INCLUDE_DIRS})

message(STATUS "Boost Include path:  ${Boost_INCLUDE_DIRS}")
message(STATUS "Python2.7 Include path: ${PYTHON_INCLUDE_DIRS}")

if(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBOOST_PYTHON_STATIC_LIB -DBOOST_USE_WINDOWS_H /bigobj")
    set(CMAKE_LINK_FLAGS "${CMAKE_LINK_FLAGS} /verbose:lib")
endif()

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/output)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/output)

add_library(${PROJECT_NAME} SHARED ${SRC_HEADER} ${SRC})

# set target library's prefix suffix
if(MSVC)
    set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
    set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".pyd")
endif()

message(STATUS "Boost_PYTHON27_LIBRARY:  ${Boost_PYTHON27_LIBRARY}")
# optimized;F:/boost_1_72_0/stage/lib/libboost_python27-vc142-mt-x64-1_72.lib;debug;F:/boost_1_72_0/stage/lib/libboost_python27-vc142-mt-gd-x64-1_72.lib

target_link_libraries(${PROJECT_NAME} ${Boost_PYTHON27_LIBRARY})
target_link_libraries(${PROJECT_NAME} ${PYTHON_LIBRARY})
target_link_libraries(${PROJECT_NAME} ${Boost_SYSTEM_LIBRARY})
target_link_libraries(${PROJECT_NAME} ${Boost_CONTAINER_LIBRARY})

I'm using cmake and Visual Studio 2019 to build my project. My boost version is 1.72 and I generated file libboost_python27-vc142-mt-x64-1_72.lib in directory boost_1_72_0\stage\lib with b2.exe.

I generated .sln file with cmake. Then I build the project in Visual Studio 2019. However,
it ended up with an error LNK1104: cannot open file 'libboost_python27-vc142-mt-x64-1_71.lib'

I really can't understand why it asks for libboost_python of version 1_71 instead of 1_72. I never introduced a version 1.71 request in any file. So how should it be like that? And how can I make it work?

My CMakeLists.txt file:

project(framecore)
cmake_minimum_required(VERSION 3.20)
message(STATUS "Configuring framecore")

set(Boost_USE_STATIC_LIBS ON)
# windows 
if(MSVC)
    # this although can be set by system variable Boost_INCLUDE_DIR etc
    set(Boost_INCLUDE_DIR F:/boost_1_72_0)
    set(Boost_LIBRARY_DIR F:/boost_1_72_0/stage/lib)
endif()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(PythonLibs 2.7 REQUIRED)
find_package(Boost REQUIRED COMPONENTS system)
find_package(Boost REQUIRED COMPONENTS container)
find_package(Boost REQUIRED COMPONENTS python27)

file(GLOB_RECURSE SRC src/core/*.cpp
        src/wraps/*.cpp)

file(GLOB_RECURSE SRC_HEADER src/core/*.hpp
        src/core/*.h
        src/wraps/*.hpp
        src/wraps/*.h)

include_directories(src)
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${PYTHON_INCLUDE_DIRS})

message(STATUS "Boost Include path:  ${Boost_INCLUDE_DIRS}")
message(STATUS "Python2.7 Include path: ${PYTHON_INCLUDE_DIRS}")

if(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBOOST_PYTHON_STATIC_LIB -DBOOST_USE_WINDOWS_H /bigobj")
    set(CMAKE_LINK_FLAGS "${CMAKE_LINK_FLAGS} /verbose:lib")
endif()

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/output)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/output)

add_library(${PROJECT_NAME} SHARED ${SRC_HEADER} ${SRC})

# set target library's prefix suffix
if(MSVC)
    set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
    set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".pyd")
endif()

message(STATUS "Boost_PYTHON27_LIBRARY:  ${Boost_PYTHON27_LIBRARY}")
# optimized;F:/boost_1_72_0/stage/lib/libboost_python27-vc142-mt-x64-1_72.lib;debug;F:/boost_1_72_0/stage/lib/libboost_python27-vc142-mt-gd-x64-1_72.lib

target_link_libraries(${PROJECT_NAME} ${Boost_PYTHON27_LIBRARY})
target_link_libraries(${PROJECT_NAME} ${PYTHON_LIBRARY})
target_link_libraries(${PROJECT_NAME} ${Boost_SYSTEM_LIBRARY})
target_link_libraries(${PROJECT_NAME} ${Boost_CONTAINER_LIBRARY})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别想她 2025-01-20 11:55:36

我现在知道原因了。我的项目文件夹中还有另一个 boost 目录,其中包含一些头文件。我错误地包含了 boost 目录并依赖于 boost 1.71....

I know the reason now. There is another boost directory with some header files in my project folder. I wrongly included the boost directory and made a dependency on boost 1.71....

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文