c++ - 如何在 automake 脚本中创建共享库 (.so)?

标签 c++ shared-libraries autotools automake

给定一些源文件 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 的示例?

最佳答案

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

lib_LTLIBRARIES = libtest.la
libtest_la_SOURCES = test.cpp
libtest_la_LDFLAGS = -version-info 0:0:0

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

关于c++ - 如何在 automake 脚本中创建共享库 (.so)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916425/

相关文章:

c++ - 如何使用 Microsoft Visual C++ 2010 通过 MATLAB 7.10 (R2010a) 创建 MEX 文件?

c++ - 使用 std::is_same、std::result_of 和 std::bind 时,static_assert 无法按预期工作

Android,在库项目中提供应用程序特定常量的最佳方式?

c++ - 在 autotools 项目中包含一个(仅 header )库

c++ - 不理解-c -o的Unix C++编译器

automated-tests - 向 autotools 项目添加额外的 make/test 目标

c++ - 从 Python 解释器调用 SWIG 生成的代码

Jenkins 共享库 : "java.lang.NoSuchMethodError: No such DSL method"

flutter - 我们可以在flutter包项目中创建像.dll这样的共享库或程序集吗?

c++ - Boost:错误的模板参数数量