2012-02-28 26 views
4

共有ライブラリ(つまりlibabc.so)と共有ライブラリを使用する実行可能ファイル(つまりmyapp)をビルドしました。共有ライブラリと私の実行可能ファイルの両方をファイルシステムに入れましたが、実行ファイルを実行すると次のエラーが表示されます共有ライブラリの読み込み中にエラーが発生しました

共有ライブラリをロード中にエラーが発生しました:/.so共有オブジェクトファイルを開くことができません。

私の共有環境は、〜/ targetfs/usr/local/abc/libにインストールしていますので、(〜/ targetfs)に置かれた別のターゲットファイルシステムがあります。私のアプリケーションをリンクする時には、私はそれを

LDFLAGSを+ = -L〜/ targetfsは/ usr/local/ABC/libに

私のアプリケーションが正常にビルド与えます。しかし、(〜/ targetfs)が自分のファイルシステムである環境でアプリケーションを実行すると、共有ライブラリをロードするときに私のアプリケーションが エラーを起こすと戸惑う。/home/user/targetfs/usr/local/abc/lib/libabc.so:can共有オブジェクトファイルを開いていない。そのようなファイルやディレクトリは存在しません。

もちろん、私のアプリケーションが存在しない共有ライブラリを検索していますが、自分のアプリケーションをこのパスから独立させたいのではなく、/ lib、/ usr/lib、/ usr/local/lib、またはLD_LIBRARY_PATHの場所です。

"問題は、"アプリケーションをその場所から独立してリンクするにはどうすればよいですか "です。

私の共有ライブラリ&のメイクファイルは以下のとおりです。

--------------共有ライブラリのメイクファイル。

CC    = $(CROSS_COMPILE)gcc 
CFLAGS   = -Wall -shared -fpic 
LDFLAGS   = -Xlinker --gc-sections --allow-shlib-undefined 
LIBRARY   = libabc.so 
OBJ_DIR   = obj 
SRC_DIR   = src 
CHK_DIR_EXISTS = test -d 
MKDIR   = mkdir -p 

# Project Source Files 
C_SOURCES += $(SRC_DIR)/abc.c 
OBJECTS += $(OBJ_DIR)/abc.o 
INCLUDES += -Iinc        
$(LIBRARY): $(OBJECTS) 
    @echo "" 
    @echo "Linking..." $(LIBRARY) 
    @$(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $(OBJ_DIR)/$(LIBRARY) 

----------アプリケーションのMakefile(不必要な情報を省略)私のMakefileの中で何が不足しているか

LDFLAGS += $(TARGETFS)/usr/local/abc/lib/libabc.so   \ 
     -lpthread -lrt 

任意の考えを(不必要な情報を省略)。

よろしくおねがいします。 Farrukh Arshad。

答えて

4

バイナリに複数の検索パスを設定するようにリンカーに依頼することができます。これらの検索パスは、-Wl、rpath = ...オプションで紹介します。

gcc -o abc abc.c 
-L~/targetfs/usr/local/abc/lib 
-labc 
-Wl,-rpath=/usr/local/abc/lib 
-Wl,-rpath=... 
-Wl,-rpath=... 
+0

ありがとうございます。問題が解決しました –

関連する問題