モジュール化されたプログラムを構築するために共有ライブラリを試しています。
コンパイルする cpp ファイルは 2 つあります。
共有ライブラリ、コンパイル
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++
ある程度の効果はありますが、両方ほどではありません。