怎么让gcc编译出来的so文件不依赖于libgcc_s.so.1?

绝对零度 发布于 2014/06/14 19:26
阅读 4K+
收藏 1

在solaris上用gcc编译一个程序得到动态链接库test.so. 

用ldd test.so命令查看,可以知道test.so依赖于/opt/csw/lib/libgcc_s.so.1.

如果把test.so拿到另外一个没有按照gcc的solaris系统中,运行就会有问题,提示不能加载

/opt/csw/lib/libgcc_s.so.1。

有什么办法让编译出来的test.so不依赖于libgcc_s.so.1呢?

加载中
0
Feng_Yu
Feng_Yu
我记得gcc是有静态编译功能的,可以将依赖一并编译,运行时不再需要依赖共享库
0
eechen
eechen
/* main.c */
#include <stdio.h>
int main(int argc, char *argv[]) {
	fprintf(stderr,"argc: %d\n",argc);
	int i;
	for(i=0;i<argc;i++) {
		fprintf(stderr,"argv[%d]: %s\n",i,argv[i]);
	}
	return 0;
}

time gcc -O2 main.c -o main
ldd ./main 返回
    linux-vdso.so.1 =>  (0x00007fff9fbfe000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0e88001000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f0e883e6000)
size main 查看大小
   text       data        bss        dec        hex    filename
   1408        560         16       1984        7c0    main

静态编译(加上-static参数):
time gcc -O2 -static main.c -o main
ldd ./main 返回 “不是动态可执行文件”。
size main 查看大小
   text       data        bss        dec        hex    filename
 782762       7532       9632     799926      c34b6    main

绝对零度
绝对零度
我是想编译成共享库, .so格式的,-static参数不行,要-shared。编译出来后就有依赖。
返回顶部
顶部