【问题标题】:libtool automake: LIBADD broken with static linking?libtool automake:LIBADD 因静态链接而损坏?
【发布时间】:2012-06-28 15:45:35
【问题描述】:

我有一个依赖于libbb 的程序aa,它依赖于libcc

在 libb 的 Makefile.am 中我添加了

libbb_la_LIBADD = -lcc

在我添加的aa的Makefile中

aa_LDADD = -lbb

这在默认情况下非常有效。

但我需要静态链接,所以我使用--disable-shared 运行所有配置。
不幸的是,在编译 aa 时,我得到了:

libb_source.c:对 libcc_symbol 的未定义引用

任何想法缺少什么?

更新:如果您正在交叉编译并使用 stagingdir,请不要考虑指定这样的依赖项。

【问题讨论】:

  • 如果 'libbb' 和 'libcc' 是用 libtool 构建的,LIBADDLDADD 变量应该列出 libbb.la 而不是 -lbb。您可以有条件地将-static 添加到AM_LDFLAGS 变量中。
  • @BrettHale 不要将答案放在 cmets 中,我的朋友! :)
  • 但是如果我在交叉编译和使用暂存目录,我还应该如何指定我的依赖项?

标签: autotools automake libtool


【解决方案1】:

不要传递链接标志。给它命名为 libtool 存档并让 automake 解决:

aa_LDADD = bb/libbb.la

如果您想要构建 Windows DLL,您可能还需要将 -no-undefined 放入 libbb_la_LDFLAGS

【讨论】:

  • 如果 libbb.la 的位置不是相对于 Makefile.am 而是在目录中的某个位置添加 -L 到 LDFLAGS,该怎么办?
  • libbb.la 实际上是您项目的一部分还是某个已安装的系统库?
  • 它是一些已安装的系统库。 LIBADD 似乎没有检查 LDFLAGS。我目前看到的唯一解决方案是编写一个配置测试来获取 .la 文件的绝对路径。但这似乎有点骇人听闻。
  • libbb 是否带有 pkg​​-config .pc 文件?如果您使用 pkg-config 获取 LDFLAGS,它们会正确命名库及其依赖项。
  • 我认为 pkg-config 不会帮助我,因为我需要 .la 文件的绝对路径,AFAIK 无法使用 pkg-config 打印。尝试链接 .la 文件时,链接器不会查看 LDFLAGS。我目前正在查看 libltdl,看看它是否可以解决我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多