2011-11-08 4 views
0

私のプログラムはダイナミックライブラリをロードしますが、ロードしようとした後にロードされます(ロードされていないか、少なくとも何かがロードされていないとエラーが発生します)。リンカーの問題またはその他?動的にロードされたライブラリ

gdbで次のように表示されます。

Program received signal SIGSEGV, Segmentation fault. 
__strlen_ia32() at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99 
99 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory. 
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S 

どうすればこの問題に対処できますか?

EDIT1:

上記の問題は、私はそれがされている必要がありますxmlファイルを持っていないためでした。

ここで私が最初に示したエラーは、私が示した最初のエラーです。

(gdb) s 
__dlopen (file=0xbfffd03c "/usr/lib/libvisual-0.5/actor/actor_AVS.so", mode=1) 
    at dlopen.c:76 
76 dlopen.c: No such file or directory. 
    in dlopen.c 
(gdb) bt 
#0 __dlopen (file=0xbfffd03c "/usr/lib/libvisual-0.5/actor/actor_AVS.so", 
    mode=1) at dlopen.c:76 
#1 0xb7f8680d in visual_plugin_get_references (
    pluginpath=0xbfffd03c "/usr/lib/libvisual-0.5/actor/actor_AVS.so", 
    count=0xbfffd020) at lv_plugin.c:834 
#2 0xb7f86168 in plugin_add_dir_to_list (list=0x804e428, 
    dir=0x804e288 "/usr/lib/libvisual-0.5/actor") at lv_plugin.c:609 
#3 0xb7f86b2b in visual_plugin_get_list (paths=0x804e3d8, 
    ignore_non_existing=1) at lv_plugin.c:943 
#4 0xb7f9c5db in visual_init (argc=0xbffff170, argv=0xbffff174) 
    at lv_libvisual.c:370 
#5 0x080494b7 in main (argc=2, argv=0xbffff204) at client.c:32 
(gdb) quit 
A debugging session is active. 

    Inferior 1 [process 3704] will be killed. 

Quit anyway? (y or n) y 
[email protected]:client$ ls /usr/lib/libvisual-0.5/actor/actor_AVS.so 
/usr/lib/libvisual-0.5/actor/actor_AVS.so 
[email protected]:client$ 

ファイルが存在します。何が起きているのか分かりません。どちらのコードを提供するかわからない

Edit2:ファイルの詳細。許可はOKです。あなたがダイナミック何ライブラリにそれを言わなかった

816K -rwxr-XR-xの1ルートルート814K 2011-11-08 15:06 /usr/lib/libvisual-0.5/actor/actor_AVS.so

+1

コードを投稿するのはどうですか?私たちが知ることは、どこかで 'strlen'への無効なポインタを渡したことだけです。 –

+0

あなたは文字列の最後を吹き飛ばしたように見えます。つまり、終わりのナルがありません。 dlsymとdlopenはどちらもユーザー定義の文字列を必要とします。私はそれが問題であるかどうか最初に見るだろう。 –

答えて

1

です。

フリーのダイナミックライブラリ、またはソースがアクセス可能なライブラリの場合は、コンパイルしてデバッグを有効にして使用できます。

Debian &いくつかのLinuxディストリビューションUbuntu-多くのライブラリ(GLibc、GTK、Qtなど)のデバッグ版を提供しているため、再ビルドする必要はありません。たとえば、Debianはlibgtk-3-0パッケージ(バイナリライブラリがほとんど)、libgtk-3-devの開発ファイル(ヘッダなど)、libgtk-3-0-dbg(ライブラリのデバッグ用の変形)を持っています。 LD_LIBRARY_PATHを適切に設定する必要があります(/usr/lib/debug/usr/lib/libgdk-3.so.0.200.1にあるため)。

時々、システムライブラリのデバッグ用のバリアントを使用すると、独自のコードでバグを見つけるのに役立ちます。 (もちろん、あなた自身のコード-g -Wallでコンパイルする必要もあります)

0

これは、故障したハードドライブが原因であることが判明しました。私は新しいものが必要なように見えます。

+0

またはメモリエラーです。これは可能性が高く、ハードディスクの故障のように見えるかもしれません。 – osgx

+0

私はこれを、VM内で同じオペレーティングシステムを実行することによって排除しました。問題は依然として続きます。それはUbuntuと関係があります。 – Scott

関連する問題