【问题标题】:Error occurs when compiling with GCC使用 GCC 编译时出现错误
【发布时间】:2013-10-01 04:07:35
【问题描述】:

我正在尝试在窗口平台上编译具有多个文件的 C 程序。但是,当我制作它时,会发生错误。我已经尝试修改 makefile 中的命令,但仍然无法修复它。 这是我的 GCC 命令:

gcc -o "SYSMONTR" $(OBJPATH)/chkdsksp ../chkdsksp.c -g -I"$(DB2PATH)/include" -I"$(MYLIBDIR)" $(MYIQDIR)/iqclilib.a $(OBJPATH)/icrou.a -lc -ldb2 -lnsl -L"$(DB2PATH)/lib"

这是结果:

gcc -o "SYSMONTR" ../../iLINKOBJ/chkdsksp ../chkdsksp.c -g -I"C:/Program Files/IBM/SQLLIB/include" -I"../../iLINKCLIB" ../../iLINKIQOBJ/iqclilib.a ../../iLINKOBJ/icrou.a -lc -ldb2 -lnsl -L"C:/Program Files/IBM/SQLLIB/lib"
../../iLINKOBJ/chkdsksp: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
makefile:49: recipe for target `SYSMONTR' failed
make: *** [SYSMONTR] Error 1

什么可能导致此类错误,我应该如何处理?在 Window (IDE: Eclipse) 上使用 cygwin。 任何支持将不胜感激。

【问题讨论】:

  • 你的命令很糟糕。 -o 标志采用单个参数,该参数是应该由编译器创建为输出的文件。所以-o SYSMONTR $(OBJPATH)/chkdsksp 的意思是“链接一个程序并将其命名为SYSMONTR,并作为它的一部分拉入文件$(OBJPATH)/chkdsksp,这可能是一个程序。你不能将一个程序链接到另一个程序。我怀疑你想要什么说是-DSYSMONTR -o $(OBJPATH)/chkdsksp
  • chkdsksp 是一个目标文件,而不是一个程序。如果使用 Mad 的命令,会出现另一个错误:“iLINKIQOBJ/iqclilib.a:文件格式无法识别;视为链接器脚本”你知道吗?谢谢。
  • 你怎么知道chkdsksp是一个目标文件?你建造它吗?如果是这样,您是否有理由不将其命名为chkdsksp.o
  • @Beta:我从另一个团队获得了这个文件。该 C 程序当前运行在 AIX 平台上。我的工作是在 Window 上编译的。所以我不介意它到底是什么。

标签: c eclipse gcc makefile


【解决方案1】:

如果chkdsksp 是另一个团队为在AIX 上运行而构建的目标文件,那么您不能指望它在Cygwin 上运行——甚至可以被你的编译器识别。您必须联系该团队并获取 a) 源代码或 b) 为您的平台编译的目标文件版本(并且经过测试)。

【讨论】:

  • 感谢 Beta,这可能是我所期望的答案。我马上联系他们。顺便说一句,如果有任何问题,请帮我解决。再次,非常感谢!
  • 亲爱的 Beta,我可以获取您的 Skype ID 或 Gtalk ID 来询问您更多信息吗?
  • @user2767584:我很乐意提供帮助,但我既没有 skype 也没有 gtalk,而且你还不能参与 stackOverflow 聊天。目前,如果您急需信息,请对此答案发表评论,我会回复(稍后我们可以删除我们的 cmets)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2016-06-30
  • 1970-01-01
相关资源
最近更新 更多