最近、Electric Fence を試していますが、C++ コードでの使用方法がわかりません。
次に例を示します。
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
int *a = new int(10);
delete a;
}
でコンパイルしました
g++ ./test.cpp -o test -lefence -L/home/bor/efence_x86_64/lib -lpthread
また、最初に Electric Fence バナーが表示されず、実行可能ファイルに EF シンボルが見つかりません (nm コマンドを使用)。
しかし、プログラムを次のように変更すると:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
char *p = (char*)malloc(20);
free(p);
int *a = new int(10);
delete a;
}
すべてが良好です-EFが表示されます。私はそれが問題をちょっと解決することを知っています、私は知っています:)。そもそもなぜ機能しなかったのかを理解しnew()
たいmalloc()
だけdelete()
ですfree()
。
私がこれに参加した理由は、boostライブラリやその他のいくつかを使用する大きなプロジェクトです。そして、このプログラムはmalloc()
orfree()
を直接呼び出すことはありません。そして、EFでビルドするときは、EFを最終的な実行可能ファイルにリンクするだけでなく、EFをそれらにリンクしようとするすべてのライブラリを再構築しました。そして、どちらにもEFシンボルが見つかりません。それは正しいアプローチですか?それとも間違っていて、最終的にEFのみを実行可能ファイルにリンクする必要があり、ライブラリはそのままにしておく必要がありますか? しかし、実行可能ファイルに EF シンボルが見つかりません。