将 dll/lib 链接到 cmake 项目

Linking dll/lib to a cmake project

提问人:DmqCsm 提问时间:10/19/2016 更新时间:10/19/2016 访问量:4235

问:

我试图将库链接到我的 cmake 项目,但我遇到了链接器错误。我花了 2 个小时试图解决这个问题,我创建了一个简单的项目,我在其中对所有路径进行了硬编码。

CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
PROJECT(Testing CXX)

INCLUDE_DIRECTORIES("B:/Projects/TMH/Libraries/Awesomium/inc")

SET(SOURCE_FILES
        src/Main.cpp
        src/Application.cpp
        src/Window.cpp
)

ADD_EXECUTABLE(Testing ${SOURCE_FILES})

TARGET_LINK_LIBRARIES(Testing B:/Projects/TMH/Libraries/Awesomium/bin/awesomium.dll)

但即使该代码也无法编译并引发链接器错误,如下所示:

CMakeFiles\Testing.dir/objects.a(Application.cpp.obj): In function `ZN9PXLClient11ApplicationD2Ev':
B:/Projects/TMH/Testing/src/Application.cpp:15: undefined reference to `_imp___ZN9Awesomium7WebCore8ShutdownEv'
CMakeFiles\Testing.dir/objects.a(Application.cpp.obj): In function `ZN9PXLClient11Application3RunEv':
B:/Projects/TMH/Testing/src/Application.cpp:20: undefined reference to `_imp___ZN9Awesomium9WebConfigC1Ev'

我要么尝试链接.lib文件,要么链接.dll文件。我改变了

TARGET_LINK_LIBRARIES(Testing B:/Projects/TMH/Libraries/Awesomium/bin/awesomium.dll)

TARGET_LINK_LIBRARIES(Testing B:/Projects/TMH/Libraries/Awesomium/lib/Awesomium.lib)

但是我得到了完全相同的错误。我 100% 确定两条路径都是正确的。

如何正确地将 dll/lib 链接到 cmake 项目?

C++ DLL CMake 链接器错误

评论

1赞 Tsyvarev 10/19/2016
CMake 文件很好。是库不提供这些符号供外部使用。查看描述如何创建库的资源并遵循它们。
0赞 DmqCsm 10/19/2016
我在 Visual Studio 项目中使用了 .lib 文件,它可以正常工作。在 Visual Studio 中,我所要做的就是将库添加到链接器设置中的其他依赖项中,但相同的 .lib 文件不适用于 cmake。
0赞 Tsyvarev 10/19/2016
将哪个生成器(Visual Studio、MinGW,...)和编译器与 CMake 一起使用?使用不同的编译器编译 C++ 代码时,可能会出现不兼容。
0赞 DmqCsm 10/19/2016
对于 Visual Studio 项目,我使用默认的 VS 安装。对于 cmake,我使用的是 MinGW 3.21 和 g++ 4.9.3。我尝试使用的 lib 文件来自 Awesomium SDK (awesomium.com)
0赞 Tsyvarev 10/19/2016
因此,用于 MinGW 的 gcc 编译器和用于 VS 的编译器之间看起来不兼容。尝试使用 gcc 构建库,它应该链接成功。

答: 暂无答案