连接器undefined reference的问题- 挨踢新手笔记- JavaEye技术网站

问题场景
一个静态链接库,.a文件。另有一个main.c,用到了库中的函数void a()。
编译的时候这样:

clang -Iinclude -Lbin -lzq main.c

提示找不到符号错误:

?

main.c:(.text+0x1a): undefined reference to `a'

用nm查看.a文件,能看到符号a。


解决方法
搜索了下,发现这个帖子:
差不多一样的问题。
原来是编译的时候参数顺序问题。因为是先指定的.a文件,连接器这时候没有看见main.o,它会认为库中的符号没有被用到,所以主动丢弃了。当后面需要链接main.o的时候就自然找不到符号了。

所以应该这样写:

clang main.c -Iinclude -Lbin -lzq

让链结器先发现main.o要使用的符号。


结论
潜规则,真是蛋疼。

?

{zx1}评论

  • gundumw100 写道我添加了<uses-permission andr ...
    -- by

  • 我添加了<uses-permission android:name=&quo ...
    -- by

  • mryufeng 写道巧了,俺也写了一篇:http://blog.yufeng.i ...
    -- by

  • 巧了,俺也写了一篇:http://blog.yufeng.info/archive ...
    -- by

  • bachmozart 写道判断连接断开的应该是反过来,由客户端判断,服务器端知道了 ...
    -- by
郑重声明:资讯 【连接器undefined reference的问题- 挨踢新手笔记- JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——