【发布时间】:2019-10-28 20:31:42
【问题描述】:
我有一个简单的程序如下:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.5)
project(test LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR})
add_executable(test main.cpp)
target_include_directories(test PRIVATE ${PROJECT_SOURCE_DIR})
target_link_libraries(test PRIVATE power.dll)
main.cpp:
#include <iostream>
#include "power.h"
using namespace std;
int main()
{
cout << "Hello World!" << endl;
power(4.);
return 0;
}
power.h:
#ifndef POWER_H
#define POWER_H
double power(double number) noexcept;
#endif // POWER_H
power.h 的实现位于名为 power.dll 的 .dll 中。
如果我用 MinGW 7.3.0 X64 编译这个项目说:
error: undefined reference to `power(double)'
如果我用 MSVC 2017 X64 编译它说:
error: LNK1104: cannot open file 'power.lib'
这两个错误都表明链接器无法检测到power.dll。
我做了很多搜索,但没有一个解决方案对我有用!
有人可以帮忙吗?
提前致谢!
【问题讨论】:
-
power.dll在您的系统上位于何处?你试过target_link_libraries(test PRIVATE power)吗? -
它位于 test.exe 目录和源目录中。是的,我也尝试了 target_link_libraries(test PRIVATE power),但 CMake 默认查找 .lib 版本而不是 .dll 版本...
-
在 Windows 上链接是使用
.lib文件执行的。.dll仅在 运行时 使用。此外,请确保power函数已从库中导出。 -
@Tsyvarev 我知道这一点,但我没有 .lib 版本,我只有 .dll 文件!所以真的没有办法链接到 .dll 文件吗?
-
您可以从
.dll创建.lib。例如。 stackoverflow.com/questions/9360280/…、stackoverflow.com/questions/9946322/… 或者只是谷歌“从 dll 获取库”。
标签: c++ windows cmake dynamic-linking