CMake:Visual Studio上的链接库
问题描述:
我试图使Windows上的CMakeklist.txt文件,我有大问题。CMake:Visual Studio上的链接库
我写
cmake_minimum_required(VERSION 3.1.2)
project(c_api)
set(INC_PATH target/release/deps)
set(PROJECT_DLL traffic.dll)
set(PROJECT_LIB traffic.dll.lib)
configure_file(${INC_PATH}/${PROJECT_DLL} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
include_directories(${INC_PATH}/include)
add_library(traffic UNKNOWN IMPORTED)
set_property(TARGET traffic PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_DLL})
set_property(TARGET traffic PROPERTY IMPORTED_IMPLIB ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_LIB})
file(GLOB SOURCES "c_api/examples/ai_module/*.c")
add_executable(ai_module
${SOURCES}
)
target_link_libraries(ai_module traffic)
我运行CMake的生成,我得到
LNK1107 invalid or corrupt file: cannot read at 0x2D8
我认为这个问题是add_library(traffic UNKNOWN IMPORTED)
但如果我将其更改为add_library(traffic SHARED IMPORTED)
我得到
LNK2019 unresolved external symbol _traffic_import_osm referenced in function _main ai_module
所以我认为Visual Studio没有看到库。
我在linux上运行这个代码,我只改变.dll
格式为.so
,它工作正常。
即时通讯使用Visual Studio 2017年15 CMake的上
答
按照documentation of your first error,似乎您试图直接链接到该.dll。在Windows上,共享库需要两个文件。共享的.dll,其中包括库中函数和类的所有定义,以及(在使用dll构建时)仅包含声明的.lib。在编译时使用stub .lib文件来告诉链接程序对函数的期望。
您是否同时拥有.lib和.dll?如果您没有.lib,则无法将.dll链接到您的程序。
答
我解决了这个问题。 CMake使项目的32位和我的.dll是64位,现在它的工作