小编yas*_*asi的帖子

加载具有相同符号的两个共享库时是否存在符号冲突

应用程序 ( app ) 依赖于两个共享库:liba.solibb.so
libalibb具有与void Hello()相同的功能,但具有不同的实现。运行时加载两个共享库,尝试访问两个版本的Hello()。
我通过 poco C++ 共享库加载 liba.so 和 libb.so,但最终它调用dlopen()来加载共享库。这是代码:

#include "Poco/SharedLibrary.h"
using Poco::SharedLibrary;
typedef void (*HelloFunc)(); // function pointer type


int main(int argc, char** argv)
{
    std::string path("liba");
    path.append(SharedLibrary::suffix()); // adds ".so"
    SharedLibrary library(path);
    HelloFunc func = (HelloFunc) library.getSymbol("hello");
    func();

    std::string path2("libb");
    path2.append(SharedLibrary::suffix()); // adds ".so"
    SharedLibrary library2(path2);
    HelloFunc func2 = (HelloFunc) library2.getSymbol("hello");
    func2();

    library.unload();
    library2.unload();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当应用程序通过 dlopen() 加载 liba.so 和 …

c++ symbols shared-libraries

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

标签 统计

c++ ×1

shared-libraries ×1

symbols ×1