
実現したいこと
cmakeで自作の動的ライブラリを動的リンクでプロジェクトに組み込んで実行したいのですが、実行時にエラーが出てしまい、上手くいきません。CMakeLists.txtの書き方に誤りがあればご指摘いただけますでしょうか
前提
VisualStudio2019を利用して以下3プロジェクトを作成いたしました。
■プロジェクト⓵:DynamicLibrarySample
動的ライブラリのプロジェクトでint piyopiyo(int a, int b)というメソッドが定義されており、
戻り値にはa + bの値を返すメソッドが1つだけ定義されている。
■プロジェクト②:LibraryCallSample
C++のコンソールアプリで⓵を動的リンクして呼び出すアプリ
■プロジェクト③:CMakeSample(★今回の問題が起きてるプロジェクト)
プロジェクトファイルを作らずCMakeを使って⓵を動的リンクして呼び出すアプリ
下記記載のソースとライブラリは全て同じディレクトリに配置
・CMakeSample.cpp
・CMakeLists.txt
・DynamicLibrarySample.h
・DynamicLibrarySample.lib
・DynamicLibrarySample.dll
発生している問題・エラーメッセージ
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー 'MyLibrary-NOTFOUND', needed by 'CMakeSample/CMakeSample.exe', missing and no known rule to make it
該当のソースコード
CMakeSample.cpp
1 2#include "CMakeSample.h" 3#include "DynamicLibrarySample.h" 4 5#pragma comment (lib, "DynamicLibrarySample.lib") 6 7using namespace std; 8 9int main() 10{ 11 int a = 1; 12 int b = 2; 13 14 int ret = piyopiyo(a, b); 15 16 printf("%d", ret); 17 18 return 0; 19} 20
CMakeLists.txt
1cmake_minimum_required (VERSION 3.8) 2 3add_executable (CMakeSample "CMakeSample.cpp" "CMakeSample.h" "DynamicLibrarySample.h") 4 5# ライブラリを追加 6add_library(MyLibrary SHARED IMPORTED) 7set_target_properties(MyLibrary PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/DynamicLibrarySample.lib) 8 9# ターゲットとライブラリをリンク 10target_link_libraries(CMakeSample PRIVATE MyLibrary) 11
試したこと
プロジェクト2で同一ライブラリをプロジェクトとして組み込んだアプリではライブラリが動作することを確認いたしました。
また、ここには記載しておりませんが、プロジェクト3と同様の手法で静的ライブラリを組み込んだアプリが動作することは確認いたしました。
(但し、CMakeLists.txtのSHAREDの箇所はSTATICと記述して確認)
試したこと(追記:2024/02/10 16:20)
IMPORTED_LOCATIONにはdllを指定するべきとQiitaのノートを見つけたので以下2パターンを試しましたが、エラーが変わりましたが正常には動作しませんでした。
CMakeLists.txt
1# ライブラリを追加 2add_library(MyLibrary SHARED IMPORTED) 3set_target_properties(MyLibrary PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/DynamicLibrarySample.dll)
→エラーの内容は変わりませんでした。
CMakeLists.txt
1# ライブラリを追加 2add_library(MyLibrary SHARED IMPORTED) 3set_target_properties(MyLibrary PROPERTIES IMPORTED_IMPLIB ${CMAKE_SOURCE_DIR}/DynamicLibrarySample.lib) 4set_target_properties(MyLibrary PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/DynamicLibrarySample.dll)
→エラーの内容が変わりましたがやはり正常には実行できませんでした。
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー '../../../DynamicLibrarySample.lib', needed by 'CMakeSample/CMakeSample.exe', missing and no known rule to make it


回答1件
あなたの回答
tips
プレビュー