2012-01-18 8 views
23

ソースファイルtest.cppを与えました。共有ライブラリlibtest.soを作りたいと思います。私はautomakeファイルの範囲内でこれをやろうとしていますが、これを動作させることはできません。次のようにautomakeスクリプトで共有ライブラリ(.so)を作成するには?

g++ -shared -fPIC test.cpp -o libtest.so 

が、私は共有ライブラリに依存します別のファイルを作成することができます:

g++ mytest.cpp libtest.so -o blah 

私は読んだことがグラムの下で例えば

++私は、次の操作を行いますautomakeはlibtoolを介して共有ライブラリを作成することしかサポートしていません。私は私のautomakeが以下のように働くことを狙ってもらうように努力しましたが、.soを生産することは決してありません。 configure.acに

:それは.laとの.oファイルを生成するために、私が得ている最も近いです

AC_ENABLE_SHARED 
AC_DISABLE_STATIC 
AC_PROG_LIBTOOL(libtool) 

Makefile.am

lib_LTLIBRARIES=libtest.la 
libtest_la_SOURCES=test.cpp 
libtest_la_CFLAGS=-fPIC 
libtest_la_CPPFLAGS=-fPIC 
libtest_la_CXXFLAGS=-fPIC 
libtest_la_LDFLAGS= -shared -fPIC 

でもらえ誰か上記に基づいて.soを構築する例を教えてください。

+0

AC_PROG_LIBTOOLをLT_INIT –

+1

Bahに置き換える必要があります。これを書いた後、上記のことが実際にソースディレクトリの隠し.libsディレクトリに.soファイルを作成したことに気付きました。 うまくいけば、これはこれについて不思議に思う誰かに役立ちます。 – skimon

+2

誰かがファイルの完全な例をここに投稿できますか?ソースファイルではなく、configure.acとMakefile.am。私はこのスレッドの情報を使ってこの作業を行うことはできません。 –

答えて

19

あなただけconfigure.acにし、Makefile.amでLT_INITを入れた場合は、ん:

 
lib_LTLIBRARIES = libtest.la 
libtest_la_SOURCES = test.cpp 
libtest_la_LDFLAGS = -version-info 0:0:0 

あなたが.soのを取得する必要があります。 -fPICをCFLAGSなどに指定しないでください。-version-info 指定子は必要ありませんが、良い考えです。

+0

テスト用で、インストールしない場合は、 'check_LTLIBRARIES'であってはいけませんか? –

+0

@Jack check_LTLIBRARIESは.soをビルドしません。私は質問の "テスト"は、check_接頭辞が暗示するのと同じ種類のテストを指していないと思います。 –

関連する問題