LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 680|回复: 6

靜態和動態鏈接

[复制链接]
发表于 2009-12-7 19:48:55 | 显示全部楼层 |阅读模式
我在學習這篇文章:
http://www.yolinux.com/TUTORIALS ... aticAndDynamic.html

它里面說要靜態鏈就用指令:
  1. cc -o executable-name prog.c libctest.a

  2. cc -o executable-name prog.c -L/path/to/library-directory -lctest
复制代码


它第二個是不是講錯 ?我用-l得到的執行檔還是動態連libgsl:
  1. $ cc -Wall -lm -o GBL_LL GBL_LL.c /usr/lib/libgsl.a /usr/lib/libgslcblas.a
  2. $ ldd GBL_LL
  3.         linux-vdso.so.1 =>  (0x00007fffdafff000)
  4.         libm.so.6 => /lib/libm.so.6 (0x00007fe4868ff000)
  5.         libc.so.6 => /lib/libc.so.6 (0x00007fe4865a6000)
  6.         /lib64/ld-linux-x86-64.so.2 (0x00007fe486b80000)
  7. $ cc -Wall -lm -o GBL_LL GBL_LL.c -l gsl
  8. $ ldd GBL_LL
  9.         linux-vdso.so.1 =>  (0x00007fffe394b000)
  10.         libm.so.6 => /lib/libm.so.6 (0x00007fd14c80d000)
  11.         libgsl.so.0 => /usr/lib/libgsl.so.0 (0x00007fd14c424000)
  12.         libc.so.6 => /lib/libc.so.6 (0x00007fd14c0cb000)
  13.         libgslcblas.so.0 => /usr/lib/libgslcblas.so.0 (0x00007fd14be94000)
  14.         /lib64/ld-linux-x86-64.so.2 (0x00007fd14ca8e000)
复制代码


好奇問一下直接用-l只能做動態鏈嗎?
发表于 2009-12-7 22:16:36 | 显示全部楼层
静态要用--static
-lxxx --static 貌似就是静态链接了..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-8 02:02:02 | 显示全部楼层
Cannot link:
  1. $ cc -static -Wall -lm -lgsl -o GBL_LL GBL_LL.c                                                                             
  2. /tmp/ccaysunA.o: In function `main':                                                      
  3. GBL_LL.c:(.text+0x9a): undefined reference to `gsl_matrix_calloc'                          
  4. GBL_LL.c:(.text+0xa8): undefined reference to `gsl_vector_alloc'                           
  5. GBL_LL.c:(.text+0xbb): undefined reference to `gsl_matrix_alloc'                           
  6. GBL_LL.c:(.text+0x275): undefined reference to `gsl_matrix_free'                           
  7. GBL_LL.c:(.text+0x281): undefined reference to `gsl_matrix_free'                           
  8. GBL_LL.c:(.text+0x28d): undefined reference to `gsl_vector_free'
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-12-8 03:33:30 | 显示全部楼层
文章的示例,仅仅是把 libctest这个库静态还是动态编译到可执行文件中去。
回复 支持 反对

使用道具 举报

发表于 2009-12-8 09:54:57 | 显示全部楼层
如果使用-lfoo,且同时有foo.a和foo.so,那么会优先动态连接.so
IIRC
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-8 11:17:42 | 显示全部楼层
Post by zhllg;2053703
如果使用-lfoo,且同时有foo.a和foo.so,那么会优先动态连接.so
IIRC


沒有控制這的選項嗎?靜態連接要每個*.a打full-path也太浪費時間了、而且都在普通LIBPATH /usr/lib/下
回复 支持 反对

使用道具 举报

发表于 2009-12-8 12:36:01 | 显示全部楼层
还是cmake吧,让它处理比较方便,你自己只专心写代码就好了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表