更新:问题已解决。该库是为Armv7a CPU设计的,但它是“软浮点”而不是“硬浮点”。似乎我的机器与SF不兼容,而是HF兼容。
我的程序依赖于一个名为libMyLib.so的外部构建库。当我像这样编译程序时:
$ g++ -std=c++11 main.cpp -o run -pthread
IT报告指出有很多未定义的引用,显然是因为我在编译时没有包含libMyLib.so库文件。所以编译器不知道他需要编译哪些程序。当我这样编译程序:
$ g++ -std=c++11 main.cpp -o run -pthread -lMyLib
它没有报告任何错误,创建了文件“run”。请注意,libMyLib.so已经在/usr/local/lib中,而且在编译时似乎已经链接了,因为现在已经定义了引用,并且创建了“run”文件。但是当我运行该文件时,会出现以下情况:
$ ./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
...
我真的不知道为什么这种情况仍然会发生。有人可以帮助我吗?
/lib
而不是/usr/local/lib
中。以root作为前缀似乎很荒谬。我不想在我的根目录下有不必要的文件夹。 - Tarun Maganti