2012-01-18 64 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 scriupt工作如下,但它似乎永遠不會產生一個.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基於上述的例子?

+0

你應該用LT_INIT替換AC_PROG_LIBTOOL – 2012-01-18 19:52:38

+1

Bah ...寫完這個之後,我意識到上面確實在我的源代碼目錄的隱藏的.libs目錄中創建了.so文件。 希望這可以幫助別人誰想知道這一點。 – skimon 2012-01-18 19:55:10

+2

有人可以在這裏發佈完整的文件示例嗎?不是源文件,而是configure.ac和Makefile.am。我無法使用此主題中的信息進行此項工作。 – 2016-08-15 17:05:11

回答

19

如果你只是把LT_INIT在configure.ac和Makefile.am,做到:

 
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'嗎? – 2012-01-21 06:00:29

+0

@Jack check_LTLIBRARIES不會構建.so!我認爲問題中的「測試」並不是指與check_前綴所暗示的測試類似的測試。 – 2012-01-22 16:49:47