求大哥救救小弟吧, cmakelist 或者 Qt 里 怎么写才能 link dll

2021-05-15 23:36:59 +08:00
 bankroft

.h 文件已经 include

现在有几个 dll 和 lib

common32.lib
common32.dll
OmniDriver32.lib
OmniDriver32.dll
SPAM32.lib
SPAM32.dll
#include "Wrapper.h"
int main() {
    Wrapper wrapper;
}
link_directories("lib/op")

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/lib/op/common32.lib")
target_link_libraries(${PROJECT_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/lib/op/OmniDriver32.lib")
target_link_libraries(${PROJECT_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/lib/op/SPAM32.lib")

上面是我写的,op 里就是 dll 和 lib,我不知道为啥一直报undefined reference to Wrapper::Wrapper()

然后这个库怎么编译的也不知道

查了很多资料都一直报上面的错

求个大哥帮小弟脱离苦海吧🧎‍♂️🧎‍♂️🧎‍♂️

或者给点搜索的内容吧🧎‍♂️🧎‍♂️🧎‍♂️

相关文档 密码 605312

818 次点击
所在节点    问与答
11 条回复
ysc3839
2021-05-16 02:01:38 +08:00
没记错的话 cmake 的 target_link_libraries 指的是链接已经在 cmake 中注册的 library 。
你要直接链接 .lib 文件的话,应该给链接器加参数。
azenk
2021-05-16 07:34:20 +08:00
bankroft
2021-05-16 10:42:21 +08:00
@ysc3839 #1 我试了直接加参数,-lcommon32 -lOmniDriver32, 还是报同样的错误

@azenk #2 后缀加或者不加都试了,还是报错

c++太难了😭😭😭
zacharyjia
2021-05-16 11:07:18 +08:00
你那个 link_directories,为什么不写完整路径呢?
试试 link_directories 用完整路径,然后 target_link_libraries 只写库名?
bankroft
2021-05-16 12:27:53 +08:00
@zacharyjia #4 完整路径也不行,试了绝对路径和相对路径的各种组合都是一样的错误,undefined reference
zacharyjia
2021-05-16 12:58:18 +08:00
@bankroft 不知道你是啥情况,我按下面这个配置能编译成功,你参考一下吧
https://paste.ubuntu.com/p/kQMTgVk8Cz/
bankroft
2021-05-16 13:06:42 +08:00
@zacharyjia #6 我试试放虚拟机里编译,不知道跟我物理机环境有没有关系
ysc3839
2021-05-16 14:29:15 +08:00
@bankroft 你这参数不对呀,你用的是 .lib 文件,那明显是 MSVC 编译器吧,MSVC 用的不是这样的参数语法。
印象中 MSVC 的链接器直接传 .lib 完整路径就可以了,不需要加什么前缀。
bankroft
2021-05-16 20:19:40 +08:00
@ysc3839 这么一讲突然发现一个问题,我用的 mingw, 我要导入的是 msvc 编译的。改 msvc 试一下。希望可以
ysc3839
2021-05-16 20:43:16 +08:00
@bankroft 你用 mingw 的话那不能用 MSVC 的 .lib 文件,得自己通过 DLL 生成 .a 文件。而且也不能用 C++ API,只能用 C API 。
bankroft
2021-05-17 21:10:08 +08:00
谢谢楼上的老哥们,问题已解决,编译器不一样的问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777163

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX