.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
1
ysc3839 2021-05-16 02:01:38 +08:00 via Android 1
没记错的话 cmake 的 target_link_libraries 指的是链接已经在 cmake 中注册的 library 。
你要直接链接 .lib 文件的话,应该给链接器加参数。 |
2
azenk 2021-05-16 07:34:20 +08:00 via Android 1
是不是不用加.lib 后缀名?参考下这个: https://github.com/AzenkChina/VirtualMeter/blob/master/Project/CMAKE/CMakeLists.txt
|
3
bankroft OP |
4
zacharyjia 2021-05-16 11:07:18 +08:00 1
你那个 link_directories,为什么不写完整路径呢?
试试 link_directories 用完整路径,然后 target_link_libraries 只写库名? |
5
bankroft OP @zacharyjia #4 完整路径也不行,试了绝对路径和相对路径的各种组合都是一样的错误,undefined reference
|
6
zacharyjia 2021-05-16 12:58:18 +08:00 1
|
7
bankroft OP @zacharyjia #6 我试试放虚拟机里编译,不知道跟我物理机环境有没有关系
|
8
ysc3839 2021-05-16 14:29:15 +08:00 via Android 1
@bankroft 你这参数不对呀,你用的是 .lib 文件,那明显是 MSVC 编译器吧,MSVC 用的不是这样的参数语法。
印象中 MSVC 的链接器直接传 .lib 完整路径就可以了,不需要加什么前缀。 |
9
bankroft OP @ysc3839 这么一讲突然发现一个问题,我用的 mingw, 我要导入的是 msvc 编译的。改 msvc 试一下。希望可以
|
10
ysc3839 2021-05-16 20:43:16 +08:00 1
@bankroft 你用 mingw 的话那不能用 MSVC 的 .lib 文件,得自己通过 DLL 生成 .a 文件。而且也不能用 C++ API,只能用 C API 。
|
11
bankroft OP 谢谢楼上的老哥们,问题已解决,编译器不一样的问题。
|