当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : ubuntu 12.10 多线程编译的问题
帖子发表于 : 2013-02-20 11:32 

注册: 2007-07-27 11:07
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
happyboy@happyboy-hp:~/workspace/c/apue/thread$ gcc -o printid -L/usr/lib/x86_64-linux-gnu/ -lpthread printid.c
/tmp/ccpZr1ny.o:在函数‘print_id’中:
printid.c:(.text+0x15):对‘pthread_self’未定义的引用
/tmp/ccpZr1ny.o:在函数‘main’中:
printid.c:(.text+0x81):对‘pthread_create’未定义的引用
collect2: 错误: ld 返回 1

对应的动态库文件是存在,为何还编译还报错呢?
happyboy@happyboy-hp:~/workspace/c/apue/thread$ ls -l /usr/lib/x86_64-linux-gnu/libpthread
libpthread.a libpthread_nonshared.a libpthread.so

看了下libpthread.so 其内容如下:
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /lib/x86_64-linux-gnu/libpthread.so.0 /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a )


页首
 用户资料  
 
2 楼 
 文章标题 : Re: ubuntu 12.10 多线程编译的问题
帖子发表于 : 2013-02-20 12:41 

注册: 2007-07-27 11:07
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
搞明白了,把-lpthread 放到最后就可以了:
gcc -o printid printid.c -lpthread


页首
 用户资料  
 
3 楼 
 文章标题 : Re: ubuntu 12.10 多线程编译的问题
帖子发表于 : 2013-02-20 13:40 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
你的原始问题出在链接选项位于obj文件前,应该是后。
其次,应该尽量使用-pthread而非-lpthread。读下手册吧,用-lpthread是有潜在问题的,gcc手册明确指出过链接pthread应该用-pthread选项(无需再加-lpthread)。用后者有附加的宏定义,可以保证libc链接的时候选择正确的库。
http://stackoverflow.com/questions/2127 ... -compiling


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译