最近编译了一份linux下写的源码,源码中并无跨平台相关的代码,因此win下无法直接编译,而且源码较多,在linux下./configure 后make,make install很容易就编译并使用。
但由于要求把该linux源码编译成win下的库在VS中调用,所以煞费工夫,总结一些东西,以免忘了。。。
cygwin 或者 msys2、mingw 下
./configure
make
make install
生成了一系列库.a文件和bin目录下的exe测试程序,exe是由cygwin 或者 msys2、mingw直接链接.a库生成的
对于纯C语言写的代码,加了extern C{}后生成的库.a文件可以直接改成.lib在VS下调用
静态
gcc -c *.c -o *.o -static
ar r *.a *.o
动态
gcc *.c *.dll -shared -o *.dll -Wl,--output-def,*.def,--out-implib,*.a -static
根据已生成的.a重新生成动态库
ar x *.a 分解出.o文件
gcc *.dll -fPIC -fopenmp -lstdc++ -shared -o out.dll *.o -Wl,--export-all-symbols,--output-def,*.def -static
根据生成的def和lib文件,用vs的cmd工具生成lib文件
lib /machine:ix86 /def:*.def
小结:
以上环境编译的.a库文件或者.dll动态库,无论是C函数还是C++类ÿ