2
的應用程序(應用)取決於兩個共享圖書館的時候是否有符號衝突。
liba and 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;
}
我的問題是,當應用程序加載liba.so和libb.so通過dlopen()的,會不會有兩個你好()實現任何符號衝突?
事實上,代碼運行良好,但我想知道是否有任何潛在風險來加載這樣的庫。