2009-05-31 17 views
6

私はバイナリと共有ライブラリを1つ持っています。 共有ライブラリでコンパイルされる:gdbは "共有オブジェクトファイルを開くことができません"と言います

all: 
g++ -g -shared -fpic $(SOURCES) -o libmisc.so 

バイナリがコンパイルされている:

LIBS=-L../../misc/src 

LDFLAGS=-lmisc 

all: 
g++ -g -o mainx $(INCLUDE) $(SOURCE) $(LIBS) $(LDFLAGS) 

Iはlibmisc.so出力経路に~/.bashrc

export LD_LIBRARY_PATH=/mnt/sda5/Programming/misc/src/ 

に設定しました。コンソールから

デバッグが正常に動作します:

gdb mainx 

しかしEmacs22から、GDBが次のメッセージで失敗し起動する:を/ mnt/SDA5 /プログラミング/メイン/ SRC/mainx:プログラムの開始

/mnt/sda5/Programming/main/src/mainx:共有ライブラリの読み込み中にエラーが発生しました:libmisc.so:共有オブジェクトファイルを開くことができません:

これは現時点では非常に扱いにくく、解決できませんでした。これがemacsの問題であるかどうか、あるいはgdbのコマンドラインでパラメータを渡すべきかどうかはわかりません。

答えて

5

Emacsはgdbを起動する前に.bashrcを読み込んでいない可能性があります。代わりに.gdbinitファイルに 'set solib-search-path'と 'set solib-absolute-path'を入れてください。

+0

ありがとうございます。 非常にうまくいった。 私は早急に答えを探すためにキーワードを使ってgdbマニュアルを検索しましたが、失敗しました。あなたは私の一日を保存しました:) 最近、gdbのマニュアルを読んでいます。 vmihai。 – grayasm

6

Emacsはbashでgdbを起動するのではなく、直接起動します。有効ではなく、LD_LIBRARY_PATHが設定されていません。

emacsを終了した場合は、新しいシェルを開き(LD_LIBRARY_PATHが設定されている)、emacsを起動してからM-X gdbを実行すると動作します。

GDBのsolib-search-pathの設定はハックです。

はるかに優れて修正が、それはで開始するLD_LIBRARY_PATHを必要としないような方法で実行可能ファイルを構築することです:

LDFLAGS=-lmisc -Wl,-rpath=/mnt/sda5/Programming/misc/src 
+2

すべてのプラットフォームで利用できるわけではなく、-rpathにも問題があります。 [rpath(リンク)](http://en.wikipedia.org/wiki/Rpath_(リンク)) いつもトレード・オフ。 –

+0

答えをありがとう。 それはまた、妥当と聞こえる。 – grayasm

5

もう一つの方法は、あなたの$HOME.gdbinitファイルを作成し、LD_LIBRARY_PATHを設定することですそこ:

# file .gdbinit 
set env LD_LIBRARY_PATH=/mnt/sda5/Programming/misc/src/ 

あなたが頻繁にそのLD_LIBRARY_PATHをデバッグする必要がある(とあなたのシェルから毎回のemacsを実行している覚えてしたくない)場合、これは便利です。

関連する問題