【问题标题】:"First defined here" error in Eclipse with C使用 C 的 Eclipse 中的“首先在此处定义”错误
【发布时间】:2013-11-07 19:23:20
【问题描述】:

我正在尝试在 Eclipse 中使用 libxml2 编译 C 程序。看起来我的代码没有问题,但是在构建项目时出现错误。

错误输出在这个截图中:https://drive.google.com/file/d/0BwV-0_2diIaaQlZHM2Fwa2R0LWc/edit

在这个错误之前,我有一个“未定义的引用”错误,但这是因为我忘记链接库 libxml2。现在是屏幕截图中的问题。我不知道该怎么办。

[已编辑] 我解决了我的问题,我只需要将-nostartfiles 放在链接器标志中。

【问题讨论】:

  • 您是否有机会直接粘贴“此处首先定义”错误消息的示例,而不是图像?
  • 我认为粘贴代码会有点乱,但我会在下一篇文章中考虑它。 PD:我解决了我的问题,我只需要将 -nostartfiles 放在链接器标志中:)
  • 粘贴代码是这里的“正常方式”。它可能会有点乱,但如果你能把它缩小到合适的大小,那就没问题了。唯一需要避免的是一堵代码墙和/或您知道与问题无关的代码。
  • 很好地解决了您的问题!您可以回答自己的问题然后接受答案,而不是在标题中添加“已解决”吗?这会将问题标记为在系统中已解决,然后让人们以后更容易阅读答案。

标签: c xml eclipse libxml2 multiple-definition-error


【解决方案1】:

我解决了我的问题,我只需要在 Linker Flags 框中写入 -nostartfiles :D 要找到“链接器标志”框,请转到您的项目 > 属性 > C/C++Build > 设置 > GCC C 链接器 > 杂项

就是这样。

感谢您的帮助。

【讨论】:

    【解决方案2】:

    我不认为你的解决方案是可以接受的,我认为当你的项目在其他环境中执行时会导致同样的问题(另一个 eclipse 配置,从控制台运行它等) 当您在项目中多次定义相同的函数时,就会出现该错误,我敢打赌,这是因为您定义了与库中已有的相同的函数。

    例如,如果我有一个名为 hello() 的函数的 lib1.h,然后在你的 main.c 中编写相同的函数(链接该库),就会出现问题。 事实上,在你的图片中,我可以看到“__data_start 的多重定义”

    所以我认为你只需要更改有问题的函数名称,它就会得到修复。

    另外,如果你在你的程序中多次包含同一个库,就会出现这个问题,但是可以使用预处理器来解决(如果你对此感兴趣,谷歌它,因为它会离题并且让我的答案太长)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 2021-12-28
      • 2018-09-19
      • 2013-09-26
      相关资源
      最近更新 更多