mingw32/bin/ld.exe: skipping incompatible表示文件位数跟系统位数不对,造成不兼容,要重新生成。
将reimp copy至MinGW的bin目录下。因为MinGW的bin目录已经配置在环境变量,reimp.exe、dlltool.exe只能放在MinGW\bin的目录下才能正常生成.a文件,放在其它目录下就算能访问,生成的文件可能有问题。
C:\MinGW\bin\reimp.exeC:\MinGW\bin\dlltool.exe
E:\Program Files\MySQL\mysql-5.6.19-win32\lib\libmysql.lib
使用reimp和dlltool
进入cmd下
cd E:\Program Files\MySQL\mysql-5.6.19-win32\lib
reimp -d libmysql.lib
dlltool -k -d libmysql.def -l libmysql.a
1.dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libmysql.a -k
2.dlltool -d libmysql.def -D libmysql.dll -l libmysql.a -k
1和2功能一样,在cmd下直接输reimp有使用帮助提示,dlltool -h,有使用帮助提示
-k Kill @<n> from exported names我分开两次测试一次不加-k生成的文件有问题,报找不到方法,编译通过;另一次加-k参数,文件正确,但是打开文件看里面也有@n的参数,没搞明白是什么意思。
Linux静态库命名规范,必须是"lib[your_library_name].a":lib为前缀,中间是静态库名,扩展名为.a
搜索时文件名去掉lib和后缀
Libraries(-l) mysql 搜索libmysql.a
Libraries(-l) libmysql 搜索libmysql.lib
总结:后来研究了下,发现不是所有的lib文件都能生成def文件,reimp.exe、dlltool.exe只能放在MinGW\bin目录下工作才正常,我把它复制到其它目录,运行没问题,但是生成的文件有问题,开始装的dev-c++是5.7.1版本,这版本虽然兼容32位和64位,但在它里面的MinGW64\bin目录生成a,竟然全是64位的,然后我的系统是32位,生成的东西都不能用。