当前位置: 技术问答>linux和unix
用两种方式链接静态库的疑问!!
来源: 互联网 发布时间:2016-03-15
本文导语: 麻烦大家帮我看下...先谢过! [xinshuow@localhost shared]$ ll 总用量 12 -rwxr-xr-x 1 xinshuow davinci 72 4月 15 11:36 hello.c -rw-r--r-- 1 xinshuow davinci 1006 4月 15 11:45 libhello2.a // 静态库 -rwxr-xr-x 1 xinshuow davinci ...
麻烦大家帮我看下...先谢过!
[xinshuow@localhost shared]$ ll
总用量 12
-rwxr-xr-x 1 xinshuow davinci 72 4月 15 11:36 hello.c
-rw-r--r-- 1 xinshuow davinci 1006 4月 15 11:45 libhello2.a // 静态库
-rwxr-xr-x 1 xinshuow davinci 468 4月 15 17:23 test.c
[xinshuow@localhost shared]$ gcc -o test_static1 test.c -L. -lhello2 // 第一种方法
[xinshuow@localhost shared]$ gcc -o test_static2 test.c -L. -lhello2 -static // 第二种方法,多了个参数-static,相对第一种有什么区别??
[xinshuow@localhost shared]$ ll
总用量 444
-rwxr-xr-x 1 xinshuow davinci 72 4月 15 11:36 hello.c
-rw-r--r-- 1 xinshuow davinci 1006 4月 15 11:45 libhello2.a
-rwxr-xr-x 1 xinshuow davinci 468 4月 15 17:23 test.c
-rwxr-xr-x 1 xinshuow davinci 4848 4月 16 11:16 test_static1 // 文件大小为4848
-rwxr-xr-x 1 xinshuow davinci 428236 4月 16 11:17 test_static2 // 文件大小为428236,怎么比test_static1大这么多??
[xinshuow@localhost shared]$ ./test_static1
Hello World !
[xinshuow@localhost shared]$ ./test_static2
Hello World !
[xinshuow@localhost shared]$ mv libhello2.a libhello2.a.bak // 没有libhello2.a也可以运行
[xinshuow@localhost shared]$ ./test_static1
Hello World !
[xinshuow@localhost shared]$ ./test_static2
Hello World !
[xinshuow@localhost shared]$
[xinshuow@localhost shared]$ ll
总用量 12
-rwxr-xr-x 1 xinshuow davinci 72 4月 15 11:36 hello.c
-rw-r--r-- 1 xinshuow davinci 1006 4月 15 11:45 libhello2.a // 静态库
-rwxr-xr-x 1 xinshuow davinci 468 4月 15 17:23 test.c
[xinshuow@localhost shared]$ gcc -o test_static1 test.c -L. -lhello2 // 第一种方法
[xinshuow@localhost shared]$ gcc -o test_static2 test.c -L. -lhello2 -static // 第二种方法,多了个参数-static,相对第一种有什么区别??
[xinshuow@localhost shared]$ ll
总用量 444
-rwxr-xr-x 1 xinshuow davinci 72 4月 15 11:36 hello.c
-rw-r--r-- 1 xinshuow davinci 1006 4月 15 11:45 libhello2.a
-rwxr-xr-x 1 xinshuow davinci 468 4月 15 17:23 test.c
-rwxr-xr-x 1 xinshuow davinci 4848 4月 16 11:16 test_static1 // 文件大小为4848
-rwxr-xr-x 1 xinshuow davinci 428236 4月 16 11:17 test_static2 // 文件大小为428236,怎么比test_static1大这么多??
[xinshuow@localhost shared]$ ./test_static1
Hello World !
[xinshuow@localhost shared]$ ./test_static2
Hello World !
[xinshuow@localhost shared]$ mv libhello2.a libhello2.a.bak // 没有libhello2.a也可以运行
[xinshuow@localhost shared]$ ./test_static1
Hello World !
[xinshuow@localhost shared]$ ./test_static2
Hello World !
[xinshuow@localhost shared]$
|
如果系统支持动态连接
-static则阻止这样连接
不然就是没有任何效果
-static则阻止这样连接
不然就是没有任何效果
|
区别在于关键是libc的链接.
gcc -o test_static1 test.c -L. -lhello2
链接libc.so或libgcc.so(动态)
==========
gcc -o test_static2 test.c -L. -lhello2 -static
链接libc.a或libgcc.a(静态), 会把libc.a/libgcc.a里的用到的.o的代码放入test_static2文件中,自然test_static2大了很多
gcc -o test_static1 test.c -L. -lhello2
链接libc.so或libgcc.so(动态)
==========
gcc -o test_static2 test.c -L. -lhello2 -static
链接libc.a或libgcc.a(静态), 会把libc.a/libgcc.a里的用到的.o的代码放入test_static2文件中,自然test_static2大了很多