2017-10-19 18 views
0

私はCMakeklist.txtファイルをWindows上に作成しようとしていますが、大きな問題があります。CMake:Visual Studioのライブラリをリンク

私は問題がadd_library(traffic UNKNOWN IMPORTED)ですが、私はadd_library(traffic SHARED IMPORTED)に変更した場合、私は

得ることを考えた私は

LNK1107 invalid or corrupt file: cannot read at 0x2D8

を得たCMakeのが発生するプロジェクトを実行

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) 

を書きました

LNK2019 unresolved external symbol _traffic_import_osm referenced in function _main ai_module

ですから、Visual Studioではライブラリが表示されません。

私はこのコードをlinux上で実行しています。私はのフォーマットを.soに変更しても問題ありません。

イムdocumentation of your first errorによるとCMakeの

答えて

0

にVisual Studio 15 2017を使用して、あなたが直接.dllファイルにリンクしようとしている表示されます。 Windowsでは、共有ライブラリには2つのファイルが必要です。ライブラリ内の関数とクラスのすべての定義を含む共有.dllと(dllを使ってビルドすると)宣言のみを含む.lib。スタブの.libファイルはコンパイル時に使用され、関数から何を期待するかをリンカに伝えます。

.libと.dllの両方がありますか? .libがない場合は、.dllをプログラムにリンクすることはできません。

0

私はこの問題を解決します。 CMakeは32ビットのプロジェクトを作成し、私の.dllは64ビットで、今は仕事

関連する問題