使用 C 的 Eclipse 中的“首先在此处定义”错误
Posted
技术标签:
【中文标题】使用 C 的 Eclipse 中的“首先在此处定义”错误【英文标题】:"First defined here" error in Eclipse with C 【发布时间】:2013-11-07 19:23:20 【问题描述】:我正在尝试在 Eclipse 中使用 libxml2 编译 C 程序。看起来我的代码没有问题,但是在构建项目时出现错误。
错误输出在这个截图中:https://drive.google.com/file/d/0BwV-0_2diIaaQlZHM2Fwa2R0LWc/edit
在这个错误之前,我有一个“未定义的引用”错误,但这是因为我忘记链接库 libxml2。现在是屏幕截图中的问题。我不知道该怎么办。
[已编辑]
我解决了我的问题,我只需要将-nostartfiles
放在链接器标志中。
【问题讨论】:
您是否有机会直接粘贴“此处首先定义”错误消息的示例,而不是图像? 我认为粘贴代码会有点乱,但我会在下一篇文章中考虑它。 PD:我解决了我的问题,我只需要将 -nostartfiles 放在链接器标志中:) 粘贴代码是这里的“正常方式”。它可能会有点乱,但如果你能把它缩小到合适的大小,那就没问题了。唯一需要避免的是一堵代码墙和/或您知道与问题无关的代码。 很好地解决了您的问题!您可以回答自己的问题然后接受答案,而不是在标题中添加“已解决”吗?这会将问题标记为在系统中已解决,然后让人们以后更容易阅读答案。 【参考方案1】:我解决了我的问题,我只需要在 Linker Flags 框中写入 -nostartfiles :D 要找到“链接器标志”框,请转到您的项目 > 属性 > C/C++Build > 设置 > GCC C 链接器 > 杂项
就是这样。
感谢您的帮助。
【讨论】:
【参考方案2】:我不认为你的解决方案是可以接受的,我认为当你的项目在其他环境中执行时会导致同样的问题(另一个 eclipse 配置,从控制台运行它等) 当您在项目中多次定义相同的函数时,就会出现该错误,我敢打赌,这是因为您定义了与库中已有的相同的函数。
例如,如果我有一个名为 hello() 的函数的 lib1.h,然后在你的 main.c 中编写相同的函数(链接该库),就会出现问题。 事实上,在你的图片中,我可以看到“__data_start 的多重定义”
所以我认为你只需要更改有问题的函数名称,它就会得到修复。
另外,如果你在你的程序中多次包含同一个库,就会出现这个问题,但是可以使用预处理器来解决(如果你对此感兴趣,谷歌它,因为它会离题并且让我的答案太长)
【讨论】:
以上是关于使用 C 的 Eclipse 中的“首先在此处定义”错误的主要内容,如果未能解决你的问题,请参考以下文章
C、C++ 和 JAVA 的 Emacs 中的 Eclipse 样式函数完成?
使用 Eclipse 从 Android 中的 C 代码调用 Java 函数而不调用 Java