如果你调用第三方dll,一切都按照网上配置,结果build报错 undefined reference to xxx
那么恭喜你,看到这篇文章
- 一种是你target_link_libraries没有配置三方库,
- 第二种是你配对了,但是ToolChians配的不和三方库一直(Window还是linux,x86还是x64,MinGw还是Visual Studio)
解决方法:修改MinGW改为Visual Studio,然后把CMakeLists.txt里面的target_link_libraries中链接的dll文件名改成lib的文件名
使用MinGW调用dll
target_link_libraries(项目名 xxx.dll)
使用Visual Studio调用lib
target_link_libraries(项目名 xxx.lib)
常见问题 ld.exe: cannot find -lxxxx
检测配置的dll或lib名字有没有错误,有没有添加
link_directories(lib)
MinGW调用msvc(VS之类的)生成的dll也会报这个错!!!
如果报错要process launch failed: unknown error
debug启动加上lib目录的环境变量
如果使用utf-8运行报错 什么Unicode之类的,添加
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>") add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
Error LNK2001 无法解析的外部符号
aux_source_directory(. SRC_LIST) # 搜索当前目录下的所有.cpp文件 add_executable(项目名 ${SRC_LIST})
项目中使用相对路径读写文件,要配置项目路径,不然读取的是cmake-build-debug路径下面
网上几乎99.99%都说了,常规的使用方法
详细说明(常规的安装配置,网上能搜到的,这里都不做说明)
使用c/c++打包的库分为linux和windows
这里只说windows
静态库(lib)和动态库(dll)
动态库一般会有(.h .lib .dll)这三个文件,如果你是用Visual Studio生成的共享库,那就要修改ToolChians,修改为Visual Studio
toolchain(大多数推荐的是MinGW,这个没错,但是你要你知道你的dll使用什么生成的,不知道就切换下试试)
引用的配置CMakeLists.txt
cmake_minimum_required(VERSION 3.19)
project(callDll)
set(CMAKE_CXX_STANDARD 11)
link_directories(lib)
include_directories(include)
add_executable(callDll main.cpp)
target_link_libraries(callDll md.lib)
目录结构