我能够成功交叉编译可以在 ARM 系统(如 Rasberry Pi)上运行的二进制文件。在没有链接到第三方库的情况下,正常的 C++ 代码可以在设备上成功运行(IE cout << "Hello World!" << endl;)。
我遇到的问题是,当我在与第三方库链接后运行可执行文件时,我收到标准 UNIX 错误“没有这样的文件或目录”。当二进制文件尝试访问共享对象文件时。我将它要查找的文件复制到 usr/lib 文件夹、usr/local/lib 文件夹以及可执行文件所在的文件夹中。
此外,我还为 LD_LIBRARY_PATH 添加了一个很好的值,以便运行时链接器可以在这些位置进行搜索。我的猜测是“系统”可能会从可执行文件中隐藏这些文件?
为了添加更多信息,我在二进制文件和共享对象文件上运行了 readelf 命令,它为我提供了文件的正确描述。它告诉我二进制文件是一个 32 位文件,并且需要我提到它找不到的这个共享对象库文件。即使在构建阶段的链接期间,我也会添加以下链接器命令 -Wl,-rpath,以设置查找共享对象文件的位置。请注意,我是在 Macintosh 机器上编译,而不是在 Rasberry Pi 本身上编译。因此交叉编译。
我觉得这是一个设置,因为目标文件在多个位置可见/有效。如果有人以前经历过这种情况,请提供任何建议。提前致谢。