分享个C/C++在动态库下的坑

2023-10-28 08:09:39 浏览数 (1)

我用简短的篇幅描述下这个坑。

如下代码编译成动态库:

代码语言:javascript复制
void foo() {
    printf("i am foo");
}
void bar() {
    foo();
}

如果只加载这个动态库,并通过dlsym找到bar来调用,是符合预期的。

但如果在加载这个动态库前加载了另外一个动态库,而且前面加载的动态库也含有一个全局的foo函数,可能(我环境测试是“一定”)会调用到前面动态库的foo函数,而不是直觉上的同一动态库,甚至同一文件下的foo函数。

这是在window wsl ubuntu下的测试结果,我不确认这是window wsl ubuntu这特定平台的规则,或者特定版本编译器的规则。对我来说这十分反直觉,故分享下。

0 人点赞