【发布时间】: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 上编译的。所以我不介意它到底是什么。