Arm UNIX:交叉编译使用共享对象文件的二进制文件后,找不到文件或目录

Arm UNIX:交叉编译使用共享对象文件的二进制文件后,找不到文件或目录,arm,cross-compiling,Arm,Cross Compiling,我能够成功地交叉编译一个二进制文件,该文件可以在ARM系统(如Rasberry Pi)上运行。没有链接到第三方库,正常的C++代码在设备上成功运行(即cOut我最近确实解决了这个问题。 问题是我使用的是Eclipse。我使用的第三方库文件的命名格式为“libSHAREDFILENAME.so”。Eclipse不太喜欢在IDE中设置要使用的库。它希望您从文件名中去掉“lib”和“.so”部分。因此,需要一个名为“libSHAREDOBJECT.so”的文件应该在Eclipse中被引用为“SHARE

我能够成功地交叉编译一个二进制文件,该文件可以在ARM系统(如Rasberry Pi)上运行。没有链接到第三方库,正常的C++代码在设备上成功运行(即cOut

我最近确实解决了这个问题。


问题是我使用的是Eclipse。我使用的第三方库文件的命名格式为“libSHAREDFILENAME.so”。Eclipse不太喜欢在IDE中设置要使用的库。它希望您从文件名中去掉“lib”和“.so”部分。因此,需要一个名为“libSHAREDOBJECT.so”的文件应该在Eclipse中被引用为“SHAREDOBJECT”。它不喜欢“lib”前缀或“.so”后缀。

我最近确实解决了这个问题


问题是我使用的是Eclipse。我使用的第三方库文件的命名格式为“libSHAREDFILENAME.so”。Eclipse不太喜欢在IDE中设置要使用的库。它希望您从文件名中去掉“lib”和“.so”部分。因此,需要一个名为“libSHAREDOBJECT.so”的文件应该在Eclipse中被引用为“SHAREDOBJECT”。它不喜欢“lib”前缀或“.so”后缀。

我自己也没有遇到这些问题-可能是因为我的设置有限,但只是一些想法:我会从应用程序的strace'开始。这应该会告诉你是否可执行文件本身失败-因为动态加载发生在应用程序内部(afaik-有人可能会纠正我)如果找不到库,它将显示在跟踪中。如果strace无法跟踪应用程序,那么这应该意味着内核无法正确加载应用程序,这可能只意味着(假设它是正确的可执行类型)链接器(用于INTERP信息的readelf文件)找不到可执行文件指定的工具。@pBlack您使用的工具链是什么?发布此工具链时我使用的工具链是“arm none linux gnueabi-*”它在Mac上,我发现了一个DMG映像,我可以挂载和使用。目前,虽然我正在使用用于Cubie板的Linaro工具链,但我自己没有遇到这些问题-可能是因为我的设置有限,但只是一些想法:我会从扫描应用程序开始。这应该会告诉你是否可执行文件本身失败-因为动态负载如果找不到lib,则会在应用程序内部发生异常(afaik-有人可能会纠正我),它将显示在跟踪中。如果strace无法跟踪应用程序,则这意味着内核无法正确加载应用程序,这可能只意味着(假设它是正确的可执行类型)链接器(用于INTERP信息的readelf文件)找不到可执行文件指定的工具。@pBlack r u使用的工具链是什么?我发布此工具链时使用的工具链是“arm none linux gnueabi-*”。它在Mac上,我找到了一个可以挂载和使用的DMG映像。目前,尽管我正在为Cubie板使用Linaro工具链: