我已经安装了 Embedded Robot Coder,这是一套用于开发嵌入式 ARM 应用程序(例如,用于 Lego NXT 积木)的工具,在 Windows 上使用 MATLAB。它包含 Cygwin、GNUARM 实用程序等。当我尝试编译我的应用程序时,生成 C 代码工作正常,但在构建时,出现错误:
Compiling /cygdrive/C/MATLAB/2013/ecrobotnxt/environment/nxtOSEK/toppers_osek/kernel/alarm.c to alarm.o C:/cygwin64/GNUARM/bin/arm-elf-gcc.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory
我打开了 Cygwin 终端(但 Cugwin 实用程序也可以在 Windows CMD 上运行),然后运行ldd
arm-elf-gcc.exe。输出如下:
$ ldd ./arm-elf-gcc.exe ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7fff9c3e0000) ??? => ??? (0x778e0000) wow64.dll => /cygdrive/c/WINDOWS/System32/wow64.dll (0x77800000) wow64win.dll => /cygdrive/c/WINDOWS/System32/wow64win.dll (0x77860000)
这是什么???
意思?我也使用了cygcheck
命令。在 Windows CMD 上输出如下:
C:\cygwin64\GNUARM\bin>cygcheck arm-elf-gcc.exe Found: arm-elf-gcc.exe arm-elf-gcc.exe
...但在 Cygwin 终端上 cygcheck 返回了一个错误:
cygcheck.exe arm-elf-gcc.exe cygcheck: could not find 'arm-elf-gcc.exe'
当我安装 Cygwin 时,我跳过了很多东西只是为了节省时间和空间,但我检查了 ECR 工具箱所需的所有包。
注意:该问题与特定的 Matlab 和 Lego 工具箱有关,但我在这里询问它是因为它使用了 Linux/Cygwin 通用机制。
答案1
我找到了解决方法。我安装了 32 位而不是 64 位版本的 Cygwin,一切正常。问题可能与 GNUARM 编译器有关,该编译器在 32 位架构下“感觉良好”。正如 @matzeri 指出的那样,有问题的库使用了 32 位 Windows 依赖项。