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

标签 linux gcc linker arm cross-compiling

我似乎在 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 编译器 (sudo apt-get install g++-arm-linux-gnueabi -y || gcc-arm-linux-gnueabi) 在 Ubuntu 机器上构建了我的代码。这些工具在这里工作正常,我可以构建目标文件并将它们链接在一起没有问题。

问题是当我在 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 文件(从路径中删除的另一个字符)。就好像我可以传入多少个 obj 文件有一些限制,一旦达到一定数量的要传入的 obj 文件,它就会开始从路径中删除字符并输出错误。

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

感谢帮助,谢谢

最佳答案

我四处搜索,发现使用 avr-gcc 向 Atmel 报告了一个非常相似的问题:

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

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

关于linux - 链接器在传递给它的目标文件上删除字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777521/

相关文章:

c - Linux 上的 gcc 如何知道它是包含 printf 函数的 libc.so.6?

c++ - XCode 无法编译 Poco 项目, undefined symbol

linux - 如何不使用英特尔 C 编译器链接 libm

linux - 如何协调两个linux进程以两步锁步计划运行?

c++ - cout<< "привет";或者 wcout<< L"привет";

C 链接器错误 : .\_build\ble_app_hids_keyboard.axf : Error: L6200E: Symbol UX_captureStarted multiply defined (by sens. o 和 main.o)

c++ - 标准 x86_64 库中的编译问题

linux - TCP ACK 响应延迟 10ms

c - 如何使用 gcov 对动态库进行单元测试?

c - 默认情况下是否优化了 gcc 编译的程序?