小编Kar*_*kan的帖子

运行程序时找不到共享对象库,但在编译期间已链接

更新:问题已解决。该库是为 Armv7a CPU 设计的,但它是“软浮动”而不是“硬浮动”。好像我的机器是 HF 而不是 SF 兼容

我的程序依赖于一个名为 libMyLib.so 的外部构建 .so 库。当我这样编译程序时:

$ g++ -std=c++11 main.cpp -o run -pthread
Run Code Online (Sandbox Code Playgroud)

它报告有很多未定义的引用,显然是因为我在编译时没有包含 libMyLib.so。所以编译器知道他需要什么来编译程序。当我像这样编译程序时:

$ g++ -std=c++11 main.cpp -o run -pthread -lMyLib
Run Code Online (Sandbox Code Playgroud)

它不会报告任何错误并创建文件“运行”。请注意,libMyLib.so 已经在 /usr/local/lib 中,并且在编译时它看起来像是链接的,因为现在定义了引用并创建了“运行”文件。但是当我运行文件时,会发生这种情况:

$ ./run
    ./run: error while loading shared libraries: libMyLib.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我已经检查过 ldd ,它显示了这个:

$ ldd run
    ...
    libMyLib.so => not found
    ...
Run Code Online (Sandbox Code Playgroud)

所以 ldd 在执行时找不到库,但在编译时找到了。我对 Linux 和链接库很陌生,所以我不知道该怎么做。

此外,在 .so 文件上运行 ldd 会返回:

$ ldd /usr/local/lib/libMyLib.so
    not a …
Run Code Online (Sandbox Code Playgroud)

c++ linux linker g++

4
推荐指数
2
解决办法
5352
查看次数

标签 统计

c++ ×1

g++ ×1

linker ×1

linux ×1