场景
- 在开发本地程序时,
C++
库由于运行时库二进制不兼容的问题,不同版本VS
编译出来的C++
动态库是不能兼容的。遇到一个开源库,没有configure
文件,没有VS
的解决方案文件,怎么编译?
说明
- 在这个目录下有
CMakeLists.txt
文件,这个文件就是cmake
的配置文件,只需要使用cmake
命令在这个目录运行即可。如果不想生成的文件混在原文件里,可以新建一个build
目录,之后在这个目录执行cmake
。如以下的..
意思是上一级的目录CMakeLists.txt
所在的位置,因为cmake
需要从当前位置找CMakeLists.txt
文件。如果这个库依赖其他库,cmake
执行时会报错, 如依赖libde265
,那么根据它的错误提示配置相应的头文件和库依赖。
cmake .. -DLIBDE265_INCLUDE_DIR="E:\software\Lib\image\libde265\libde265-1.0.8" -DLIBDE265_LIBRARY="libde265.lib"
-
DLIBDE265_LIBRARY
是配置在VisualStudio
的link->input
里的,配置libde265.lib
就可以。之后生成的解决方案文件,再打开解决方案在附加目录里输入libde265
的库路径。 -
在
Windows
上开发,如果是C++
库,那么最好用cmake
,它可以编译基于VC++
的库依赖。如果是纯C
库,使用mingw
来编译,注意编译出来的库不要再依赖mingw
的运行时库,不然VC++
调用这个库也是会崩溃的。 如果需要mingw
编译出来的C++
库可以给VC++
使用,那么要使用mingw-w64-ucrt-x86_64-toolchain
。看参考[2].
开发
-
cmake 官网
-
Get Started with C++ and MinGW-w64 in Visual Studio Code