【发布时间】:2018-01-07 05:23:18
【问题描述】:
更新:问题已解决。该库是为 Armv7a CPU 制作的,但它是“软浮动”而不是“硬浮动”。看来我的机器是 HF 而不是 SF 兼容
我的程序依赖于一个名为 libMyLib.so 的外部构建 .so 库。当我像这样编译程序时:
$ g++ -std=c++11 main.cpp -o run -pthread
它报告有很多未定义的引用,显然是因为我在编译时没有包含 libMyLib.so。所以编译器知道他需要什么来编译程序。当我像这样编译程序时:
$ g++ -std=c++11 main.cpp -o run -pthread -lMyLib
它不报告任何错误并创建文件“运行”。请注意,libMyLib.so 已经在 /usr/local/lib 中,并且在编译时看起来像已链接,因为现在定义了引用并创建了“运行”文件。但是当我运行文件时,会发生这种情况:
$ ./run
./run: error while loading shared libraries: libMyLib.so: cannot open shared object file: No such file or directory
我检查了 ldd,它告诉我:
$ ldd run
...
libMyLib.so => not found
...
所以 ldd 在执行时找不到库,但在编译时会找到它。我对 Linux 和链接库还很陌生,所以我不知道该怎么做。
另外,在 .so 文件上运行 ldd 会返回:
$ ldd /usr/local/lib/libMyLib.so
not a dynamic executable
我已经检查过在错误平台上运行 .so 文件时可能会出现此消息。但我已经检查过,该库是为 arm 编译的(我在树莓派上运行 -> arm):
$ objdump -f /usr/local/lib/libMyLib.so | grep ^architecture
architecture: arm, flags 0x00000150:
我还更新了链接器:
$ sudo ldconfig -v
...
/usr/local/lib:
libwiringPi.so -> libwiringPi.so.2.44
libwiringPiDev.so -> libwiringPiDev.so.2.44
libMyLib.so -> libMyLib.so.1
...
我真的不知道为什么这仍然会发生。谁能帮帮我?
【问题讨论】: