Gcc 如何链接动态lib(.so)和静态libc.a
我试图链接静态libc.a和动态lib,但没有成功 我已经尝试过以下几点:Gcc 如何链接动态lib(.so)和静态libc.a,gcc,linker,shared-libraries,static-libraries,Gcc,Linker,Shared Libraries,Static Libraries,我试图链接静态libc.a和动态lib,但没有成功 我已经尝试过以下几点: 首先,我测试所有动态: gcc-sharedlibtest.c-o libtest.so gcc-c main.c-o main.o gcc main.o-o测试-L.-ltest 它正在工作(编译和执行) 其次,我测试我想要的(动态lib和静态libc): gcc-sharedlibtest.c-o libtest.so gcc-c main.c-o main.o gcc main.o-o test libtes
- gcc-sharedlibtest.c-o libtest.so
- gcc-c main.c-o main.o
- gcc main.o-o测试-L.-ltest
- gcc-sharedlibtest.c-o libtest.so
- gcc-c main.c-o main.o
- gcc main.o-o test libtest.so/usr/lib/libc.a
- gcc-static main.c-->编译正常,运行正常
- gcc main.c/usr/lib/libc.a-->编译正常,运行:分段错误(显示它可以访问libc.so)
$ cat libtest.c
#include <stdio.h>
void foo() { printf("%d\n", 42); }
$ cat main.c
#include <stdio.h>
extern void foo();
int main() { puts("The answer is:"); foo(); }
$ export LD_LIBRARY_PATH=$PWD
$ gcc -shared libtest.c -o libtest.so && gcc -c main.c -o main.o && gcc main.o -o test -L. -ltest && ./test
The answer is:
42
$ gcc -shared libtest.c -o libtest.so && gcc -c main.c -o main.o && gcc main.o -o test libtest.so /usr/lib/libc.a && ./test
The answer is:
42
实现所需功能的一种方法是使用:
-static libgcc-Wl,-Bstatic-lc
什么操作系统?如果你为你感兴趣的操作系统添加一个标签,更多的人会看到这个问题。gcc的版本是什么?
$ ldd ./libtest.so
linux-gate.so.1 => (0xb80c7000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7f4f000)
/lib/ld-linux.so.2 (0xb80c8000)