前提
CMakeでビルドしようとしています。
ある実行ファイルに同一プロジェクト内の共有ライブラリをリンクさせようとしたところリンカエラーが発生しました。
実現したいこと
- 実行ファイルに共有ライブラリをリンクする
発生している問題・エラーメッセージ
以下はCMakeの出力です。
[main] Building folder: CMake-Shared [build] Starting build [proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build d:/dev/Cpp/CMake/CMake-Shared/build --config Debug --target all -- [build] [1/3 33% :: 0.319] Building CXX object CMakeFiles/Lib.dir/Lib/src/hello.cc.obj [build] [2/3 66% :: 0.408] Linking CXX shared library Lib.dll [build] [3/3 100% :: 0.476] Linking CXX executable Main.exe [build] FAILED: Main.exe [build] cmd.exe /C "cd . && C:\PROGRA~1\LLVM\bin\CLANG_~1.EXE -fuse-ld=lld-link -nostartfiles -nostdlib -g -Xclang -gcodeview -O0 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -Xlinker /subsystem:console CMakeFiles/Main.dir/Main/src/main.cc.obj -o Main.exe -Xlinker /MANIFEST:EMBED -Xlinker /implib:Main.lib -Xlinker /pdb:Main.pdb -Xlinker /version:0.0 Lib.lib -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -loldnames && cd ." [build] lld-link: error: undefined symbol: public: __cdecl Hello::Hello(class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>>) [build] >>> referenced by D:\dev\Cpp\CMake\CMake-Shared\Main\src\main.cc:8 [build] >>> CMakeFiles/Main.dir/Main/src/main.cc.obj:(main) [build] [build] lld-link: error: undefined symbol: public: class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>> __cdecl Hello::Say(class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>>) [build] >>> referenced by D:\dev\Cpp\CMake\CMake-Shared\Main\src\main.cc:9 [build] >>> CMakeFiles/Main.dir/Main/src/main.cc.obj:(main) [build] clang++: error: linker command failed with exit code 1 (use -v to see invocation) [build] ninja: build stopped: subcommand failed. [proc] The command: "C:\Program Files\CMake\bin\cmake.EXE" --build d:/dev/Cpp/CMake/CMake-Shared/build --config Debug --target all -- exited with code: 1 and signal: null [build] Build finished with exit code 1
該当のソースコード
PowerShell
1PS D:\dev\Cpp\CMake\CMake-Shared> tree /f 2D:. 3│ CMakeLists.txt 4│ 5├─Lib 6│ ├─include 7│ │ hello.h 8│ │ 9│ └─src 10│ hello.cc 11│ 12└─Main 13 └─src 14 main.cc
CMake
1# ./CMakeLists.txt 2 3cmake_minimum_required(VERSION 3.13) 4project(sample CXX) 5 6add_library(Lib SHARED 7 ${CMAKE_CURRENT_SOURCE_DIR}/Lib/src/hello.cc 8) 9target_include_directories(Lib INTERFACE 10 ${CMAKE_CURRENT_SOURCE_DIR}/Lib/include 11) 12 13add_executable(Main 14 ${CMAKE_CURRENT_SOURCE_DIR}/Main/src/main.cc 15) 16 17target_link_libraries(Main Lib) 18# target_link_directories(Main PUBLIC $<TARGET_FILE:Lib>) 19# target_link_directories(Main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/build/Lib)
C++
1// ./Lib/include/hello.h 2 3#ifndef __HELLO_H__ 4#define __HELLO_H__ 5 6#include <string> 7 8class Hello { 9private: 10 std::string name; 11 12public: 13 Hello(std::string name); 14 15 std::string Say(std::string message); 16}; 17 18#endif // __HELLO_H__
C++
1// ./Lib/src/hello.cc 2 3#include "../include/hello.h" 4 5Hello::Hello(std::string name) { 6 this->name = name; 7} 8 9std::string Hello::Say(std::string message) { 10 return message + ", " + name + '.'; 11}
C++
1// ./Main/src/main.cc 2 3#include <iostream> 4 5#include "hello.h" 6 7using namespace std; 8 9int main() { 10 Hello hello("John"); 11 cout << hello.Say("Hi") << endl; 12}
試したこと
target_link_directoriesを使いましたが変わりませんでした。
add_libraryのSHAREDをSTATICに変えるとリンクできます。
main.ccの#includeで相対パスを使いましたが変わりませんでした。
補足情報(FW/ツールのバージョンなど)
PowerShell
1PS D:\dev\Cpp\CMake\CMake-Shared> wmic os get caption 2Caption 3Microsoft Windows 11 Home 4 5PS D:\dev\Cpp\CMake\CMake-Shared> wmic os get osarchitecture 6OSArchitecture 764 ビット 8 9PS D:\dev\Cpp\CMake\CMake-Shared> cmake --version 10cmake version 3.24.2 11 12CMake suite maintained and supported by Kitware (kitware.com/cmake). 13PS D:\dev\Cpp\CMake\CMake-Shared> ninja --version 141.11.1 15PS D:\dev\Cpp\CMake\CMake-Shared> clang++ -v 16clang version 15.0.2 17Target: x86_64-pc-windows-msvc 18Thread model: posix 19InstalledDir: C:\Program Files\LLVM\bin 20PS D:\dev\Cpp\CMake\CMake-Shared> code -v 211.73.0 228fa188b2b301d36553cbc9ce1b0a146ccb93351f 23x64

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。