2017-10-19 35 views
0

我試圖使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的上

回答

0

按照documentation of your first error,似乎您試圖直接鏈接到該.dll。在Windows上,共享庫需要兩個文件。共享的.dll,其中包括庫中函數和類的所有定義,以及(在使用dll構建時)僅包含聲明的.lib。在編譯時使用stub .lib文件來告訴鏈接程序對函數的期望。

您是否同時擁有.lib和.dll?如果您沒有.lib,則無法將.dll鏈接到您的程序。

0

我解決了這個問題。 CMake使項目的32位和我的.dll是64位,現在它的工作