gcc编译时,什么时候需要用-l参数指明连接库?

(2012-04-10 01:18:32)

标签:

杂谈

gcc编译时,什么时候需要用-l参数指明连接库?例如,需要连接线程库libpthread.a时,必须用-lpthread。

可是这个线程库也在标准目录/usr/include/lib/下,为什么必须专门指明连接这个库?

是不是只有c语言标准库,才不用-l参数指明?不一定的,这个是你的cc工具的配置有关系。

比如aix下的

more /etc/vac.cfg

xlc: use = DEFLT

crt = /lib/crt0.o

mcrt = /lib/mcrt0.o

gcrt = /lib/gcrt0.o

libraries= -L/usr/lpp/xlopt,-lxlopt,-lc ####### 看到了吗?

proflibs = -L/lib/profiled,-L/usr/lib/profiled

options = -qansialias

谢谢ivhb!回复好快啊。

还是不太明白,我用的是gcc,不知道这个工具的配置在哪里。命令如下:

gcc -o test test.c -lpthread

gcc 没有用过:),不知道gcc是否有-v选项,如果有的话,你可以打开那个选项。看看具体的过程。比如我的aix下

/tmp>cat a.c

#include

int

main(void)

{

printf("hello world\n");

}

/tmp>cc -v a.c

exec: export(export,XL_CONFIG=/etc/vac.cfg:cc,NULL)

exec:

/usr/vac/exe/xlcentry(/usr/vac/exe/xlcentry,-D_AIX,-D_AIX32,-D_AIX41,-D_AI

X43,-D_AIX50,-D_AIX51,-D_AIX52,-D_IBMR2,-D_POWER,-qlanglvl=extended,-qnoro,-qnor

oconst,-oa.o,a.c,/tmp/xlcW0Utqeqa,/tmp/xlcW1Utqeqb,/dev/null,a.lst,/dev/null,/tm

p/xlcW2Utqeqc,NULL)

exec: export(export,XL_BACKEND=/usr/vac/exe/xlCcode,NULL)

exec: export(export,XL_LINKER=/bin/ld,NULL)

exec: export(export,XL_DIS=/usr/vac/exe/dis,NULL)

exec:

/usr/vac/exe/xlCcode(/usr/vac/exe/xlCcode,-qlanglvl=extended,-qnoro,-qnoro

const,/tmp/xlcW0Utqeqa,/tmp/xlcW1Utqeqb,a.o,a.lst,/tmp/xlcW2Utqeqc,NULL)

exec:

/bin/ld(/bin/ld,-b32,/lib/crt0.o,-bpT:0x10000000,-bpD:0x20000000,a.o,-L/us

r/lpp/xlopt,-lxlopt,-lc,NULL)

unlink: a.o

unlink: /tmp/xlcW0Utqeqa

unlink: /tmp/xlcW1Utqeqb

unlink: /tmp/xlcW2Utqeqc

回复的有点儿文不对题,希望-v有助于你的理解,有所启发吧谢谢http://www.xssio.com/!很有启发,先学习学习。

$ gcc -v -o a hello_multi.c

Using built-in specs.

Target: i486-linux-gnu

Configured with: ../src/configure -v

--enable-languages=c,c++,fortran,objc,obj-c++,treelang

--prefix=/usr --enable-shared --with-system-zlib

--libexecdir=/usr/lib --without-included-gettext

--enable-threads=posix --enable-nls --program-suffix=-4.1

--enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug

--enable-mpfr --enable-checking=release i486-linux-gnu

Thread model: posix

gcc version 4.1.2 20060928 (prerelease) (Ubuntu

4.1.1-13ubuntu5)

/usr/lib/gcc/i486-linux-gnu/4.1.2/cc1 -quiet -v hello_multi.c

-quiet -dumpbase hello_multi.c -mtune=generic -auxbase hello_multi

-version -fstack-protector -fstack-protector -o

/tmp/cc3GUfz5.s

ignoring nonex

1b88af60

as -V -Qy -o /tmp/ccwi6K28.o /tmp/cc3GUfz5.s

GNU assembler version 2.17 (i486-linux-gnu) using BFD version 2.17

Debian GNU/Linux

/usr/lib/gcc/i486-linux-gnu/4.1.2/collect2 --eh-frame-hdr -m

elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a

/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o

/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crti.o

/usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin.o

-L/usr/lib/gcc/i486-linux-gnu/4.1.2

-L/usr/lib/gcc/i486-linux-gnu/4.1.2

-L/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib -L/lib/../lib

-L/usr/lib/../lib /tmp/ccwi6K28.o -lgcc --as-needed -lgcc_s

--no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed

/usr/lib/gcc/i486-linux-gnu/4.1.2/crtend.o

/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crtn.o

/tmp/ccwi6K28.o: In function `main':

hello_multi.c:(.text+0x30)http://www.faminorson.com:对‘pthread_create’未定义的引用

hello_multi.c:(.text+0x5f):对‘pthread_create’未定义的引用

hello_multi.c:(.text+0x72):对‘pthread_join’未定义的引用

collect2: ld returned 1 exit status

首先,libpthread.a一般在/usr/lib下不可能在/usr/include/lib下吧?

/usr/lib下有很多库,gcc默认只载入c/c++语言使用的标准库,如标准io库(如printf)和标准模板库(stl,g++),

其它的库都载入的话程序就太大了

gcc也不会自动去寻找系统中的所有库,谁知道你系统中有多少库呢?原帖由 tysn 于 2007-8-4 21:17 发表

http://bbs.chinaunix.net/images/common/back.gif

首先,libpthread.a一般在/usr/lib下不可能在/usr/include/lib下吧?

/usr/lib下有很多库,gcc默认只载入c/c++语言使用的标准库,如标准io库(如printf)和标准模板库(stl,g++),

其它的库都载入的话程序 ...

thanks!

是的,/usr/include/lib是笔误,应该是/usr/lib/

我也猜测gcc不搜索库文件,因为libpthread.a和其他标准库文件如libc.a等都在同一个目录下。只是不懂,为什么头文件.h会在设定路径下搜索,库文件就不进行搜索呢,两者关系密切,处理上却有差异。

如你所言,库文件,是以载入的方式使用。这里载入是指什么?不知道连接的过程,如何找到应当连接的object文件,如何连接。

[ 本帖最后由 TAW 于 2007-8-5 10:33 编辑 ]网上有一份文档

Loaders>

http://www.linuxforum.net/forum/showflat.php?Cat=&Board=program&Number=483117&page=0&view=collapsed&sb=5&o=7&fpart=

建议看一看.原帖由 TAW 于 2007-8-5 10:26 发表

http://bbs.chinaunix.net/images/common/back.gif

thanks!

是的,/usr/include/lib是笔误,应该是/usr/lib/

我也猜测gcc不搜索库文件,因为libpthread.a和其他标准库文件如libc.a等都在同一个目录下。只是不懂,为什么头文件.h会在设定路径下搜索,库文

...

之所以不搜索,是因为链接器不知道要搜索什么,它怎么知道你要链接什么库?如果对所有当前未被解析的符号都搜索一下的话,不但效率成问题,也不可靠。如果你能在代码中告诉链接器需要什么库的话,它当然可以直接帮你搜索,事实上

Plan 9 上的 8l 等链接器就是这么做的。

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

linux连接库参数-l,gcc编译时,什么时候需要用-l参数指明连接库?相关推荐

  1. Linux命令【三】gcc编译+静态库+动态库+makefile+gdb调试

    用C编译器编译源文件:gcc 源文件 -o 可执行文件名 详细步骤: gcc -E a.c -o a.i预处理器将头文件展开,宏替换,去掉注释 gcc -S a.i -o a.s编译器将C文件变成汇编 ...

  2. LaTex中编译时出现“Undefined control sequence. l.178 \newlab”问题

    问题描述: LaTex编译时突然编译不成功,并有以下提示 "! Undefined control sequence. l.62 \newlab            ? " 逐行 ...

  3. php 正则替换url参数,url Rewrite 重写时带“?”(问号)参数的传递

    一,Rewrite重写时带"?"(问号)参数的传递 很多人都会遇到需要将网站以前的旧URL转换到新版本的新URL来,但是有一些带有参数的地址由于涉及到参数名的变更,需要通过伪静态的 ...

  4. bean validation校验方法参数_项目启动时首先校验Spring Boot配置参数

    1. 概述 在项目实际开发过程中,为了更好的复用,我们参考Spring Boot Starters,封装了许多企业内部中间件的starter.这些中间件的接入都需要申请并在项目中配置一些特定的参数.我 ...

  5. GCC 编译时优化某一个或几个函数或者不优化某一个或几个函数

    有的时候我们会有这样的需求:不想让编译器优化某一个或几个函数.针对某一个或几个函数做设置特殊的优化等级. 以下有三种方法: __attribute((optimize("STRING&quo ...

  6. 预编译时#define 后面只跟一个参数

    #define a #define后面只跟一个"参数" 定义宏,并在预处理过程中将其替换为空字符串(即删除). 这样做主要是为了标记某些内容,使程序阅读者能够清楚标记表明的意义,同 ...

  7. cmake mysql 参数_MySQL cmake编译时这些参数是什么意思?-问答-阿里云开发者社区-阿里云...

    一般用到的参数# -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径 # -DMYSQL_DATADIR=/usr/local/mysql/data \ # ...

  8. linux编译动态库未定义,GCC链接库的一个坑:动态库存在却提示未定义动态库的函数...

    背景 在GCC中已经指定链接库,然而编译时却提示动态库函数未定义! 测试出现的错误提示如下: [GMPY@13:48 tmp]$gcc -o test -L. -lmylib test.c /tmp/ ...

  9. linux gcc编译错误:statically linked applications requires at runtime the shared libraries

    statically linked applications requires at runtime the shared libraries from the glibc version used ...

  10. c语言中包含math.h的时用gcc编译要加-lm参数

    c语言中包含math.h时,用gcc编译时要-lm参数: 如以下的程序sqrt.c,编译:gcc sqrt.c -o sqrt -lm /*sqrt.c*/ /*在0到十万里找出一个加上100且加上1 ...

最新文章

  1. 面试题:四种Java线程池用法解析 !=!=未看
  2. 家属楼如何设置使用免费wifi
  3. mysql group by using filesort优化
  4. matlab 矩阵序列R6(n),MATLAB___09年试题加答案
  5. 改造MUC实现Openfire群
  6. laravel字符截断
  7. MVP小白入门,只需5步
  8. Germany Gone with honour - 德国队 带着胜利离开
  9. Android 调用系统拍照后返回的图片变小了(变模糊了)
  10. 服务器运维KPI指标,运维服务工程师考核表.docx
  11. LeNet识别眼疾iChallenge-PM
  12. 【css】鼠标禁用样式
  13. Python choice() 函数
  14. 「字节码插桩」统计方法耗时(第一篇:初出茅庐)- 第311篇
  15. 孙俪主演的热播剧《安家》房似锦,让我们看到比贫穷更可怕的是原生家庭
  16. 【Paper Reading】二值化网络——BNN
  17. android 自定义view,字母排序(仿微信好友列表)
  18. arm64服务器性能,80核ARM服务器有多恐怖 性能比64核霄龙还强
  19. Grass Planting 题解
  20. TOPWAY智能彩色TFT液晶显示模块

热门文章

  1. Labview温度采集系统
  2. 千年3步法外挂 千年3脚本 千年3外挂 千年3最新外挂
  3. ARM资源免费下载——超级全面,力荐
  4. python炫彩界面_炫彩界面库和火花脚本编辑框scintilla制作python IDE框架
  5. 高一计算机教学,高一信息技术教学计划参考
  6. 开机黑屏 只显示鼠标 电脑黑屏 有只老鼠 举 [我们已经成功地解决了]
  7. 磁盘、u盘、移动硬盘被写保护了,不能复制文件,解决方案
  8. 计算机网络国家职业三级,计算机网络管理员国家职业标准
  9. OA办公系统免费版评测 哪个适合自己?
  10. Kali扫描工具Nmap