基于gmp开发第三方库,后者以动态链接库(静态库?)对方式发布,
为了效率gmp建议对该库采用静态链接,
所以,目的是生成静态链接gmp库的库文件(动态库?静态库?)
一、生成可执行文件
1. 动态链接库的编译
Mac和linux都是:
gcc -o param_convention1 param_convention.c -lgmp
2. 静态链接库的编译
Mac是:
gcc -o param_convention2 param_convention.c -Wl,-no_pie /usr/local/lib/libgmp.a
linux是:
gcc -o param_convention2 param_convention.c -static /usr/lib/x86_64-linux-gnu/libgmp.a
二、生成动态链接库
Mac是:
gcc -bundle -flat_namespace -undefined suppress -o pc.so pc.c -Wl,-no_pie /usr/local/lib/libgmp.a
或者
gcc -dynamiclib -current_version 1.0 -o libpc.dylib pc.c -Wl,-no_pie /usr/local/lib/libgmp.a
生成可执行文件
gcc -o main main.c ./libpc.dylib -Wl,-no_pie /usr/local/lib/libgmp.a
或
gcc -o main main.c -dynamic -L. -lpc -Wl,-no_pie /usr/local/lib/libgmp.a
Linux是:
gcc -fPIC -shared -o libpc.so
生成可执行文件
gcc -o main main.c ./libpc.so /usr/lib/x86_64-linux-gnu/libgmp.a
不过虽然gmp不是动态库了,但是libpc还是动态库的方式发布,动态库对效率问题依然存在,似乎不会改善性能?
为了效率gmp建议对该库采用静态链接,
所以,目的是生成静态链接gmp库的库文件(动态库?静态库?)
一、生成可执行文件
1. 动态链接库的编译
Mac和linux都是:
gcc -o param_convention1 param_convention.c -lgmp
2. 静态链接库的编译
Mac是:
gcc -o param_convention2 param_convention.c -Wl,-no_pie /usr/local/lib/libgmp.a
linux是:
gcc -o param_convention2 param_convention.c -static /usr/lib/x86_64-linux-gnu/libgmp.a
二、生成动态链接库
Mac是:
gcc -bundle -flat_namespace -undefined suppress -o pc.so pc.c -Wl,-no_pie /usr/local/lib/libgmp.a
或者
gcc -dynamiclib -current_version 1.0 -o libpc.dylib pc.c -Wl,-no_pie /usr/local/lib/libgmp.a
生成可执行文件
gcc -o main main.c ./libpc.dylib -Wl,-no_pie /usr/local/lib/libgmp.a
或
gcc -o main main.c -dynamic -L. -lpc -Wl,-no_pie /usr/local/lib/libgmp.a
Linux是:
gcc -fPIC -shared -o libpc.so
生成可执行文件
gcc -o main main.c ./libpc.so /usr/lib/x86_64-linux-gnu/libgmp.a
不过虽然gmp不是动态库了,但是libpc还是动态库的方式发布,动态库对效率问题依然存在,似乎不会改善性能?