gcc要编写一个动态库,同时需要静态链接libc.a的函数

时间:2021-03-17 15:29:20
RT
我用的这样的命令
gcc test.c -o test.so -shared -fPIC -static编译器提示错误。
换做
gcc test.c -o test.so -shared -fPIC -Bstatic -L/usr/lib64/libc.a
编译没有问题,但是通过readelf -s test.so看,fopen等glibc的函数还是动态链接的

2 个解决方案

#1


又static又shared,你到底想怎样。。

-L是路径,不是文件名。。

这样分开做:

gcc -o test.o -c test.c -fPIC
gcc -o test.so test.o /usr/lib64/libc.a -shared

#2


出于版本一致的考虑
我的动态库用到了另外一个库的一个函数,我想让这个函数静态链接在我的动态库中
楼上的回复和我的第一种方法的报错是一样的
/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/bin/ld: /usr/lib64/libc.a(vfscanf.o): relocation R_X86_64_32 against `_pthread_cleanup_push_defer' can not be used when making a shared object; recompile with -fPIC
/usr/lib64/libc.a: could not read symbols: 错误的值

#1


又static又shared,你到底想怎样。。

-L是路径,不是文件名。。

这样分开做:

gcc -o test.o -c test.c -fPIC
gcc -o test.so test.o /usr/lib64/libc.a -shared

#2


出于版本一致的考虑
我的动态库用到了另外一个库的一个函数,我想让这个函数静态链接在我的动态库中
楼上的回复和我的第一种方法的报错是一样的
/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/bin/ld: /usr/lib64/libc.a(vfscanf.o): relocation R_X86_64_32 against `_pthread_cleanup_push_defer' can not be used when making a shared object; recompile with -fPIC
/usr/lib64/libc.a: could not read symbols: 错误的值