应用程序 ( app ) 依赖于两个共享库:liba.so和libb.so。
liba和libb具有与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 和 …