2011-07-22 5 views
2

dlsymを使用して、efenceコードにmalloc/callocラッパーを作成しました(efence malloc/callocから離れていることがあります)。私はそれをリンクし、実行すると、エラー、次の与える:私は「libefence.a」それはこのように起こっている使用している場合は、今すぐ"動的にロードされないコードでRTLD_NEXTが使用されました"

bash-3.2# /tool/devel/usr/bin/gcc -g -L/tool/devel/usr/lib/ efence_time_interval_measurement_test.c -o dev.out -lefence -ldl -lpthread 

bash-3.2# export LD_LIBRARY_PATH=/tool/devel/usr/lib/ 

bash-3.2# ./dev.out 

eFence: could not resolve 'calloc' in 'libc.so': RTLD_NEXT used in code not dynamically loaded 

を「RTLD_NEXTが動的にロードされていないコードで使用される」:

bash-3.2# /tool/devel/usr/bin/gcc -g -L/tool/devel/usr/lib/ -static  
efence_time_interval_measurement_test.c -o dev.out -lefence -ldl -lpthread 

/tool/devel/usr/lib//libefence.a(page.o): In function `stringErrorReport': 
/home/raj/eFence/BUILD/electric-fence-2.1.13/page.c:50: warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead 

/home/raj/eFence/BUILD/electric-fence-2.1.13/page.c:50: warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead 

/tool/devel/usr/lib//libc.a(malloc.o): In function `__libc_free': 
/home/rpmuser/rpmdir/BUILD/glibc-2.9/malloc/malloc.c:3595: multiple definition of `free' 
/tool/devel/usr/lib//libefence.a(efence.o):/home/raj/eFence/BUILD/electric-fence-2.1.13/efence.c:790: first defined here 
/tool/devel/usr/lib//libc.a(malloc.o): In function `__libc_malloc': 
/home/rpmuser/rpmdir/BUILD/glibc-2.9/malloc/malloc.c:3551: multiple definition of `malloc' 
/tool/devel/usr/lib//libefence.a(efence.o):/home/raj/eFence/BUILD/electric-fence-2.1.13/efence.c:994: first defined here 
/tool/devel/usr/lib//libc.a(malloc.o): In function `__libc_realloc': 
/home/rpmuser/rpmdir/BUILD/glibc-2.9/malloc/malloc.c:3647: multiple definition of `realloc' 
/tool/devel/usr/lib//libefence.a(efence.o):/home/raj/eFence/BUILD/electric-fence-2.1.13/efence.c:916: first defined here 

私を助けてください。リンクに問題はありますか?

+0

libefence.soまたはlibefence.aとリンクしていますか? –

+0

libdefence.aとlibefence.soの両方がlibディレクトリにあります。私は、私が静的に使うまでは.soを取ると思う。 – kingsmasher1

+0

私は、少なくとも誰かが私の質問に答えた:) – kingsmasher1

答えて

2

NO ONE IN STACK OVERFLOW WHO CAN RESOLVE THIS

問題はあなたの質問ではなく、私たち;-)

まずオフであり、efenceはほとんどのLinuxシステム上で使用するために間違ったツールです。 efenceが見つけることができるほとんどのバグでは、Valgrindがそれらを見つけて、あなたに説明することができます(したがって、修正することができます)。 efenceを使用する正当な理由は、アプリケーションが何時間も実行され、Valgrindが遅すぎる場合のみです。

第二に、efenceは静的リンクで動作することを意図していないので、あなたは-staticフラグを取得するエラーは、全く驚くべきことではないですしています。

最後に、ご使用のシステムにlibcがインストールされていること(/lib)と、/tool/devel/usr/lib/にはどのライブラリが存在しているかを教えていただけませんでした。 libc.so.6が/ usr/devel/usr/libに存在し、そのバージョンが/ libにインストールされているバージョンと一致しない可能性が非常に高いです。

これは、エラーRTLD_NEXT used in code not dynamically loadedを説明します。問題はglibcが複数のバイナリで構成されていることです。はすべて正確にと一致する必要があります。システムが例えばlibc-2.7がインストールされている場合は、glibc-2.7から/lib/ld-linux.so.2を使用しています(ダイナミックローダーはすべての実行可能ファイルにハードコードされており、環境変数の影響を受けません)。 .6 glibc-2.9から。これを行う通常の結果は、SIGSEGV、奇妙な未解決のシンボルエラー、そして意味をなさないその他のエラーです。

+0

libefence.a使用していたが、効果を追加しています。/tool/devel/usr/lib(glibc)のいずれかです。または/ tool/usr/lib(SSlibc)。 libcのバージョンはおそらくlibc.so.6です(しかし、申し訳ありませんが、今日は週末以来、これについてあなたを確認することはできません)。リクエスト、他のヒントをお願いしますか?また、efenceには静的ライブラリ(libefence.a)があります。 efenceが静的リンクのためのものではないと言うなら、これはどういう意味ですか? – kingsmasher1

+0

我々は独立した/ libがありませんうれしいです私は – kingsmasher1

+0

/ツール/ develのは/ usr/libには、すべてのglibcライブラリを持っており、またlibefence.soだけでなく、それlibefence.a私はそのパスを与えた理由です。 – kingsmasher1

関連する問題