2011-12-07 25 views
2

私はgccの
を使用してUbuntuで共有ライブラリを作成しようとしている(main.cppに)
これは私のmakefileであり、私はまだプログラムをコンパイルすることができません。GCC共有ライブラリの問題

all: 
    #compile object(fPIC: creates position independent code) 
    gcc -fPIC -Wall -g -c shared.cpp 

    #compile shared library 
    gcc -shared -Wl,-soname,libshared.so.1 -o libshared.so.1.0.1 shared.o -lc 

    #link shared library 
    gcc -g -o main main.cpp -L. -lshared 
  • 私は、最初の行は、私は "-lc" は何をするかわからないよ
  • 正しいか確信しています。私はそれがリンカに何かを渡すと思いますか?
  • 私はライブラリをインストールしたくないので、現在のディレクトリからリンクできるようにしたいだけです。私は試しました:export LD_LIBRARY_PATH=.
    しかし、それは違いがないようです。すべてが現在のディレクトリにあります。

    ERROR: /usr/bin/ld: cannot find -lshared

は、どのように私は、コンパイラは私のライブラリの現在のディレクトリをチェックするのですか?

答えて

4

問題は、それがディレクトリに見ていないということではないようrun pathおそらく何かを強制する必要があり、問題は、ライブラリ「libshared.so.1.0.1」と命名したことです。 -lsharedを使用すると、ライブラリ検索パスで 'libshared.so'または 'libshared.a'という名前のファイルが検索されます。

ほとんどの場合、バージョン管理されたシステムライブラリを使用すると、 'libshared.so.1'または 'libshared.so'がインストールされていても、最新のものへのリンクが 'libshared.so'として提供されます。 1.0.1 '。あなたは「libshared.so.1.0.1」という名前のファイルを残すように続けた場合、あなたのケースで

、あなたは2つのシンボリックリンクを作成したいと思う:

  1. libshared.soを - だからライブラリーld
  2. libshared.so.1 - ビルド時にSO名をlibshared.so.1と宣言しているので、このリンクを提供する必要があります。そうしないと、実行可能ファイルは適切な共有ファイルを見つけることができません実行時にライブラリ。
+0

ありがとうございます。それを見つけると私は未定義の参照の束を得る。だから、私はこれがlibshared.soでlibshared.so.1ではないと仮定していると思います。エラー: /tmp/ccZrfhqj.o:関数 '__static_initialization_and_destruction_0(int、int) ': –

+1

@Xploit:正しいなぜあなたはそれを受け入れないのですか?あなたは受け入れられた0の答えを持っています(あなたの質問が正しく答えられなかったからではありません)。 –

+0

@ Serge Dundich、新しいサイトへの感謝 - ありがとう。 この問題を抱えている人は、g ++とgccを使用していないことを確認してください –

0

あなたはMakefile -sの目的である依存関係を記述しません。そして、あなたはおそらく

.PHONY: all clean 
CXX=g++ 
CXXFLAGS=-g -Wall 
all: main 
main: main.o libshared.so 
     $(LINK.cpp) -o [email protected] $< -Wl,-rpath,. -L. -lshared 
libshared.so: shared.pic.o 
     $(LINK.cpp) -shared -o $^ $< 
main.o: main.cc shared.hh 
%.pic.o: %.cc 
     $(CXX) $(CXXFLAGS) -fPIC -c -o [email protected] $< 
# 
clean: 
     rm -f *.o *.so main *~ 
+0

haha​​、私はエチケットを作るのが分かっていることを知っていますが、私はそれが最初に働くことを望みます。 "-rpath"はそれをしませんでしたが、それは間違いなく追加する必要があります。まだここで見つけられないというエラーが表示されます:/ usr/bin/ld –

関連する問題