正在加载.so库

loading .so library C++

本文关键字:so 加载      更新时间:2023-10-16

我正在尝试加载库库。所以,当我尝试if exist返回true,但是当我使用dlopen返回库不存在。

std::ifstream ifile("library.so"); if (ifile) {
    cout << "Exist!" << std::endl; }
cout << "C++ dlopen demonn";
// open the library cout << "Opening hello.so...n"; void* handle = dlopen("library.so", RTLD_LAZY);
if (!handle) {
    cerr << "Cannot open library: " << dlerror() << 'n';
    return 1; }

dlopen在它可以搜索的路径中受到很大限制(简而言之:默认路径加上LD_LIBRARY_PATH变量——请参阅完整的文档以获得完整的列表)。您的ifstream查找当前目录(无论它是什么),它很可能不包含在dlopen考虑的默认路径中。

解决方案包括:

  • 相应地设置LD_LIBRARY_PATH(这通常是首选的方法)。
  • 使用绝对路径而不是相对路径。
  • 将库放在默认路径之一(例如:/lib/usr/lib).
相关文章: