使用automake / libtool将共享库与静态非自动生成的lib链接起来

时间:2014-12-05 15:49:35

标签: windows static-libraries automake

在我的共享库foo中,我按如下方式链接静态库栏:

foo_la_LIBADD = /path/to/bar.lib

链接时,我得到以下内容:

*** Warning: Trying to link with static lib archive /path/to/bar.lib.
*** I have the capability to make that library automatically link in when
*** you link to this library.  But I can only do this if you have a
*** shared version of the library, which you do not appear to have
*** because the file extensions .lib of this argument makes me believe
*** that it is just a static archive that I should not use here.

并且链接失败。

bar.lib实际上是一个中级便利档案,但它不是由automake生成的。

我可以通过手工生成bar.lib的bar.la包装器

来解决这个问题
old_library='bar.lib'
shouldnotlink=no

但这似乎是一个令人毛骨悚然的黑客,我宁愿避免。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您的库依赖于其他库,请不要使用libtool链接Windows上的共享库。如果这样做,至少应该为不是由autotools生成的任何库创建.la包装器。

相反,您可以直接使用cl.exe或link.exe为Windows创建和维护自定义链接规则。您可以在Makefile.am中有条件地指定此类规则,它们将覆盖默认的libtool规则。这比用libtool打架要麻烦得多。