背景
msys2中使用msys2编译工具链,(cmake 指定生成MSYS Makefiles",并使用msys2的gcc等编译)
静态库
msys2中编译C/C++代码时,无法直接使用msvc编译的静态库,也无法直接使用linux环境下编译的静态库
动态库
可以使用msvc编译的动态库,在代码中Load,但应该只支持C语言函数接口。或者利用导入库在代码中包含头文件使用,此时也只支持C语言函数接口,编译时链接导入库,然后运行时自动搜索该动态库。
但注意,导入库也不能使用msvc编译出来的,需要通过其动态库*.dll文件及msys2中的gendef及dlltool工具生成对应的导入库。
先运行
gendef *.dll
生成对应的.def文件
再运行
dlltool -d *.def -l *.a
生成该导入库
编译时,最好静态库的命名为lib*.a形式,此时链接无需依赖*.dll文件,并且程序内的导入表也只和*.def文件内的信息有关。否则编译时需要*.a和*.dll文件放一起,并且导入表也会收到*.dll文件影响,可能导致导入表中的dll文件名与该文件的实际文件名不一致
2905

被折叠的 条评论
为什么被折叠?



