2010-01-18 95 views
7

如何強制automake創建標準共享庫而不是libtoolized?通常情況下,我會創建abc.so,它以全路徑引用並加載到主程序中。有沒有辦法迫使AM做同樣的事情?如果我列出它爲_LIBRARY,automake抱怨:'abc.so' is not a standard library name; did you mean 'libabc.a'Automake和標準共享庫

只是爲了澄清:是的,我只需要.so支持 - 無靜態。是的,我想要一個自定義文件名。

+0

大聲笑...這是由工程師在工程的經典標誌。它發生在工程師被允許推動需求時。他們採取了一些簡單的措施,使其變得非常複雜,幾乎不可用(如果可以使用的話)。 – jww 2017-11-02 15:33:37

回答

6

Automake不知道如何構建共享庫,因爲沒有可移植的方式。如果你想要一個帶有Automake的共享庫,你必須使用Automake + Libtool。請注意,默認情況下,您可以輕鬆配置libtool不建立任何靜態庫(在configure.ac中使用LT_INIT([disable-static]))。

+0

不是我真正想到的,而是接受了一些東西 – viraptor 2010-01-20 14:53:38

+0

嗯......當被明確告訴構建靜態庫時,這似乎不是一個好的解決方案。另請參閱Automake手冊中的[27.8 Per-Object Flags Emulation](https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html)。 – jww 2017-11-02 15:35:08

0

IIRC,在libtool的幫助下創建的庫沒有什麼特別之處,除非您鏈接到libltdl。如果你不想使用libtool,你有權選擇並不太在意可移植性,那麼你可以自由地使用沒有libtool的automake。我會建議使用libtool的強大功能。

其實我甚至不知道_LIBRARY是什麼,在the manual/Linking section沒有找到它。

1

libtoolized庫是圍繞一個或多個標準庫的包裝。 運行「make」後可以在「.libs」中找到這些庫,或者在運行「make install」後在「$ prefix/lib」中找到這些庫。

在Linux機器上,最終應該找到一個名爲「libabc.so」的文件。

7

libtool是要走的路。如果你想自定義名稱,-module選項添加到_LDFLAGS,例如:

plugindir= /some/where 
plugin_LTLIBRARIES= abc.la 
abc_la_LDFLAGS= -module