【问题标题】:Problem compiling shared library/plugin with autotools使用自动工具编译共享库/插件时出现问题
【发布时间】:2011-10-06 18:02:58
【问题描述】:

我对 autotools 很陌生,看来我的 libtool 有问题 - 它不会构建共享库而是创建一个静态库...

这就是我的 configure.ac 的样子:

AC_PREREQ([2.67])
AC_INIT([helloworld], [1.0], [...])
AM_INIT_AUTOMAKE([foreign])
LT_INIT

# Checks for programs.
AC_PROG_CXX
AC_PROG_LIBTOOL

# Checks for header files.
AC_CHECK_HEADERS([alloca.h inttypes.h stdint.h])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

和 Makefile.am:

noinst_LTLIBRARIES=helloworld.la

helloworld_la_CXXFLAGS=-w -DLINUX ...
helloworld_la_LDFLAGS=-avoid-version -module -shared -export-dynamic

# List of source files
helloworld_la_SOURCES=helloworld.cpp ...

这里有什么问题吗?

感谢您的帮助。

【问题讨论】:

  • 可能与你的问题无关,但是LT_INIT是AC_PROG_LIBTOOL的替代品,所以你可以从configure.ac中删除AC_PROG_LIBTOOL
  • 你为什么要建立一个共享的便利库?您是否打算使用 noinst_LTLIBRARIES 而不是 lib_LTLIBRARIES?
  • -DLINUX 有几个问题。 1) 它属于 helloworld_la_CPPFLAGS,因为它是用于预处理器的。 2)您不应该将编译基于平台,而应基于特定功能。 3) 如果忽略规则 2,则应在配置时确定平台,而不是将其硬编码到 Makefile.am 中。

标签: shared-libraries autotools


【解决方案1】:

我相信你想要

lib_LTLIBRARIES = helloworld.la

使用 noinst 指示 libtool 构建一个便利库,以及那些 通常不共享。

【讨论】:

  • 正确,虽然我想补充一点,libtool 会为您决定这烦人的。例如,我在一个加载(共享库)测试插件的项目中有测试程序。它们不是自动化单元测试,因此它们不属于check_LTLIBRARIES - 但它们也不是用于安装的。所以noinst_LTLIBRARIES是他们唯一明智的去处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
相关资源
最近更新 更多