linux – 链接器删除传递给它的目标文件上的字符?

我似乎在
Windows机器上使用ARM-
Linux交叉编译遇到了一个奇怪的异常现象.我正在使用从Mentor Graphic网站获得的Sourcery CodeBench Lite Edition(arm-none-linux-gnueabi-gcc).

http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

以前,我使用arm-linux编译器在Ubuntu机器上构建了我的代码(sudo apt-get install g -arm-linux-gnueabi -y || gcc-arm-linux-gnueabi).这里的工具工作正常,我可以构建目标文件并将它们链接在一起没问题.

问题是当我在Windows中进行ARM-Linux交叉编译时..更具体地说,是链接阶段.这是我的make文件中的链接器命令

  %.elf: $(OBJ_C_OMAP)
       @echo "linking to make ELF"
       @echo $(OBJ_C_OMAP)
       @echo "-------------------------------"
       $(CC) $(CFLAGS) $(OBJ_C_OMAP) --output $@ $(LDFLAGS) 

OBJ_C_OMAP包含所有目标文件及其完整路径的列表,CFLAGS是一堆编译器标志,LDFLAGS是一个链接器标志.当它到达这一点时,链接器会通过并最终抛出一个错误:

<full_path_to_an_object_file>: No such file or directory

检查< full_path_to_an_object_file>时似乎缺少一个角色.如果我将此字符串与@echo $(OBJ_C_OMAP)给出的字符串进行比较,则存在不匹配,$(OBJ_C_OMAP)变量包含正确的路径,但无论出于何种原因,链接器都是错误的.作为发生的事情的一个例子:

/ad2_ra/ap/modules/gps/gps_ubx_ucenter.o:没有这样的文件或目录

当$(OBJ_C_OMAP)中指定的目录显示时

/ad2_raw/ap/modules/gps/gps_ubx_ucenter.o

在此示例中,缺少“w”字符.

除了这种奇怪的行为,如果我从列表中删除此对象文件,问题仍然存在于另一个.o文件(从路径中删除另一个char).就好像我可以传入多少个obj文件有一些限制,一旦它到达某个obj文件传入它就开始从路径中删除字符并输出错误.

这可能是这个编译器的Lite版本中的一个错误或者可能是一些限制(我正在使用它).另请注意,我链接了相当多的“少数”对象(约66个文件),我不确定在为此编译器链接这么多时是否需要特别注意.

援助表示赞赏,谢谢

最佳答案 我四处搜索,发现一个非常类似的问题报告给Atmel与avr-gcc:

http://asf.atmel.com/bugzilla/show_bug.cgi?id=1965

问题似乎是Windows每个命令行只能接受8191个字符.您的链接步骤命令行是否超过该限制? (http://support.microsoft.com/kb/830473)

点赞