c++ - 链接到自己创建的 dll 失败

标签 c++ dll cmake clion mingw-w64

我确实使用 CLION 创建了一个非常基本的“C++ 库”,其中仅包含一个函数。库类型为“共享”。 在 Library.h 中只有一个

void hello();

函数声明。 Library.cpp 包含定义

void hello(){std::cout << "hello";}

当我编译它时,我得到 2 个文件:libLibrary.dll 和 libLibrary.dll.a。

我的问题来了。当我创建一个名为 Test(可执行文件)的新项目时,我可以毫无问题地包含 Library.h 文件。但由于“对 `hello()' 的 undefined reference ”,它不会编译,这并不奇怪,因为我没有链接到创建的 DLL 文件。我将“target_link_libraries”添加到 CMakeLists.txt 并将两个 DLL 文件复制到要构建可执行文件的同一目录。

CMakeLists 文件如下所示:

cmake_minimum_required(VERSION 3.12)
project(Test)
set(CMAKE_CXX_STANDARD 17)
add_executable(Test main.cpp)
target_link_libraries(Test Library)

它总是相同的错误消息:

C:/PROGRA~2/MINGW-~1/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686/w64-mingw32/bin/ld.exe: cannot find -lLibrary

我也试过

target_link_libraries(Test libLibrary)
target_link_libraries(Test -libLibrary)
target_link_libraries(Test -Library)
target_link_libraries(Test libLibrary.dll)
target_link_libraries(Test Library.dll)
target_link_libraries(Test -libLibrary.dll)

...无济于事。

我错过了什么?

最佳答案

我最终可以通过指定 .dll 文件的具体位置来链接到 .dll 文件,正如@drescherjm 所建议的那样。这里使用命令成功链接到 .dll 文件

target_link_libraries(Test ${CMAKE_BINARY_DIR}/libLibrary.dll)

关于c++ - 链接到自己创建的 dll 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53136464/

相关文章:

c++ - 如何将 Google 测试输出打印到文本文件?

c++ - 我应该如何命名这些类?

c++ - 有没有办法防止在派生类的实例上调用基类方法?

c++ - 在 C++ 中对字符串使用 OR 运算符

c++ - 运行时检查失败 #2

c# - 如何在应用程序中使用引用同一 dll 的不同版本的两个 dll?

c++ - 在 CMake 项目中链接静态库 - 未定义的引用

android - 在 Android 上构建时为 "error in backend: Undefined temporary symbol"

c# - 如何从 C# 作为 MT4 dll 连接到 Mysql?

c - 是否有来自低级库(如 kernel32.dll 或 ntdll.dll)的 wsprintf() 类型函数?