覆盖动态库中的函数
您好,我有一个程序,其中包含一个全局函数,我想在运行时自定义。比如,有许多版本的函数foo()分散在共享库中。现在,基于在运行时检测到的系统配置,我想使用来自适当库的函数。
文件loader.cpp:
#include <dlfcn.h>
#include <iostream>
void __attribute__((weak)) foo();
int main(int argc, char *argv[])
{
void* dl = dlopen("./other.so", RTLD_NOW | RTLD_GLOBAL);
if (!dl)
{
std::cerr << dlerror() << std::endl;
return 1;
}
if (foo)
{
foo();
}
else
{
std::cerr << "No foo?" << std::endl;
}
dlclose(dl);
return 0;
}
文件other.cpp:
#include <iostream>
void foo()
{
std::cout << "FOO!" << std::endl;
}
我编译程序
g++ -Wall -fPIC -o loaded loader.cpp -ldl
g++ -Wall -fPIC -shared -o other.so other.cpp
但是,弱符号不会被覆盖。任何提示?
没有找到相关结果
已邀请:
2 个回复
链眷克袒姜
陈獭
如果你使它成为一个纯C代码并编译 gcc而不是g ++,你会发现它按预期工作。 或者,将其定义如下: