我正在尝试使用共享库来构建模块化程序。
有两个 cpp 文件需要编译:
共享库,编译
g++ -fPIC -shared module.cpp -o module.so
//module.cpp
#include <iostream>
使用共享库的文件,编译
g++ src/main.cpp -ldl -o 二进制
或者
g++ -DFIX src/main.cpp -ldl -o 二进制
//main.cpp
#include <dlfcn.h>
#ifdef FIX
# include <iostream>
#endif
int main()
{
void* h = dlopen("./module.so", RTLD_LAZY);
if ( h )
{
dlclose(h);
}
}
在FIX
未定义的情况下,valgrind 报告大量仍可访问的内存(5,373 字节),在FIX
已定义的情况下,没有内存泄漏。
iostream
在共享库中使用有什么问题?
g++-4.6、g++-4.7 和 g++-4.8 会出现此问题。g++-4.4 没有显示这种行为。遗憾的是,我没有其他编译器可供测试(因此我不想切换到 g++-4.4)。
更新:
使用附加标志编译共享库文件-static-libstdc++ -static-libgcc
会减少泄漏块的数量,但不能完全减少。-static-libgcc
单独没有效果,-static-libstdc++
有一些效果,但不如两者都大。