【问题标题】:Oh no, not another Undefined Reference question!哦,不,不是另一个未定义的参考问题!
【发布时间】:2011-02-18 15:48:07
【问题描述】:

不幸的是。

我已经编译了我的共享库,链接器不会抱怨找不到它,但我仍然收到未定义的引用错误。考虑到我可能做错了什么,我做了一些研究,发现了这个不错、简单的演练:

http://www.adp-gmbh.ch/cpp/gcc/create_lib.html

我一直遵循这封信,但我仍然得到:

$ gcc -Wall main.c -o dynamically_linked  -L.\ -lmean
/tmp/ccZjkkkl.o: In function `main':
main.c:(.text+0x42): undefined reference to `mean'
collect2: ld returned 1 exit status

这是非常简单的东西,所以出了什么问题?!我的设置中是否有需要检查/调整的内容?

GCC 4.3.2 Fedora 10 64 位

【问题讨论】:

  • '\' 不是路径分隔符。 '/' 是。

标签: c gcc linker compilation undefined-reference


【解决方案1】:

变化:

$ gcc -Wall main.c -o dynamically_linked  -L.\ -lmean

到:

$ gcc -Wall main.c -o dynamically_linked  -L. -lmean



你可能打算这样做:

$ gcc -Wall main.c -o dynamically_linked  -L./ -lmean

没关系,但后面的/ 是多余的

【讨论】:

  • 同意但是...... . $ gcc -Wall main.c -o 动态链接 -L。 -lmean /usr/bin/ld: 找不到 -lmean collect2: ld 返回 1 退出状态所以现在 ld 似乎找不到库,而使用 $ gcc -Wall main.c -o dynamic_linked -L.\ -lmean / tmp/cceWR2jQ.o: In function main': main.c:(.text+0x42): undefined reference to mean' collect2: ld returned 1 exit status 似乎在说“找到库”但拒绝链接:(奇怪。
  • @roony: 否 - 您最初使用的 \ 字符会转义下一个字符(在本例中为空格),因此您实际上只是将 ". -lmean" 作为到 -L 的路径传递。您现在正在传递一个带有更正命令行的库,但没有找到它。它应该命名为libmean.so 或类似名称。
  • 是的!该库是 libmean.so,但 [[$ gcc -Wall main.c -o dynamic_linked -L -lmean]] 仍然在 main arghh 中产生未定义的 ref 到 `mean'!
  • @roony: 是错字还是-L 后面真的没有.
  • err.. 我做到了,但现在已经消失了。我目前的尝试与我之前的评论完全一样。这太奇怪了。我正在扫描旧的 makefile 以寻找线索,但我尝试的任何方法都不起作用!
【解决方案2】:

图书馆是如何创建的?库工具?

向我们展示您当前目录的 ls -l,并查看 gcc -v <rest of your command> 所说的内容(提供 gcc 正在做什么的详细信息)。

【讨论】:

    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2020-10-18
    相关资源
    最近更新 更多