2010-01-18 96 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