web-dev-qa-db-ja.com

automakeスクリプトで共有ライブラリ(.so)を作成する方法は?

いくつかのソースファイルtest.cppを指定すると、共有ライブラリlibtest.soを作成します。 automakeファイルのスコープ内でこれを実行しようとしていますが、これを機能させることができません。

たとえば、g ++では、次のようにします。

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

次に、共有ライブラリに依存する別のファイルを次のように作成できます。

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

Automakeはlibtoolを介した共有ライブラリの作成のみをサポートすることを読みました。 automakeスクリプトを次のように動作させようとしましたが、.soが生成されないようです。私が得た最も近いものは、それが.laと.oファイルを生成することです:

configure.ac:

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を構築する例を教えてもらえますか?

25
skimon

LT_INITをconfigure.acとMakefile.amに配置するだけの場合は、次のようにします。

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

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

21
William Pursell