【问题标题】:How to create a shared library (.so) in an automake script?如何在 automake 脚本中创建共享库 (.so)?
【发布时间】:2012-02-13 13:02:55
【问题描述】:

给定一些源文件 test.cpp 我想创建一个共享库 libtest.so 。我正在尝试在 automake 文件的范围内执行此操作,但我似乎无法使其正常工作。

例如在 g++ 下,我执行以下操作:

g++ -shared -fPIC test.cpp -o libtest.so

然后我可以创建另一个依赖于共享库的文件,如下所示:

g++ mytest.cpp libtest.so -o blah

我读到 automake 只支持通过 libtool 创建共享库。我试图让我的 automake 脚本按如下方式工作,但它似乎永远不会产生 .so 。我得到的最接近的是它生成一个 .la 和 .o 文件:

在configure.ac中:

AC_ENABLE_SHARED
AC_DISABLE_STATIC
AC_PROG_LIBTOOL(libtool)

在 Makefile.am 中

lib_LTLIBRARIES=libtest.la
libtest_la_SOURCES=test.cpp
libtest_la_CFLAGS=-fPIC
libtest_la_CPPFLAGS=-fPIC
libtest_la_CXXFLAGS=-fPIC
libtest_la_LDFLAGS= -shared -fPIC

谁能给我一个基于上述构建 .so 的示例?

【问题讨论】:

  • 您应该将 AC_PROG_LIBTOOL 替换为 LT_INIT
  • 呸...写完后我意识到上面确实在我的源目录的隐藏 .libs 目录中创建了 .so 文件。希望这可以帮助其他对此感到疑惑的人。
  • 有人可以在这里发布文件的完整示例吗?不是源文件,而是 configure.ac 和 Makefile.am。我无法使用此线程中的信息完成这项工作。

标签: c++ shared-libraries autotools automake


【解决方案1】:

如果您只是将 LT_INIT 放在 configure.ac 和 Makefile.am 中,请执行以下操作:

lib_LTLIBRARIES = libtest.la libtest_la_SOURCES = test.cpp libtest_la_LDFLAGS = -版本信息 0:0:0

你应该得到一个.so。您不应将 -fPIC 指定为 CFLAGS 等。 -version-info 说明符不是必需的,但它是个好主意。

【讨论】:

  • 如果是为了测试不安装,不应该是check_LTLIBRARIES吗?
  • @Jack check_LTLIBRARIES 不会构建 .so!我认为问题中的“测试”不是指与 check_ 前缀所暗示的相同类型的测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多