使用Autotools生成一个.so文件

Generating a .so file with Autotools

本文关键字:一个 so 文件 Autotools 使用      更新时间:2023-10-16

我想使用Autotools来创建一个。so文件,以便我可以使用dlsym加载它。我读过一些类似的话题,但没有一个建议的解决方案对我有效。以下是我的内容:

我想把一个简单的hello.cpp编译成一个。so.

configure.ac

    AC_INIT(My Project, 0.1, my@email, myproject)
    AC_PREREQ(2.68)
    AC_COPYRIGHT(GNU General Public License)
    AM_CONFIG_HEADER([config.h])
    AC_PROG_CXX
    AM_INIT_AUTOMAKE([1.9 foreign])
    AC_CONFIG_FILES(Makefile)
    AC_ENABLE_SHARED
    AC_DISABLE_STATIC
    LT_INIT
    AC_OUTPUT

Makefile.am

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

我从这里得到了这个想法,但是当我输入:

    autoreconf -i
    ./configure
    make

我得到一个libtest。La文件,但遗憾的是没有。so文件。如果有帮助,我通常是这样将hello.cpp编译成hello.so:

    g++ -Wall -shared -rdynamic -fPIC hello.cpp -o hello.so

如果有人告诉我我做错了什么,我会很感激,这样我终于得到了。so文件。

我认为您需要将AM_PROG_LIBTOOL添加到您的configure.ac:

AC_INIT(My Project, 0.1, my@email, myproject)
AC_PREREQ(2.68)
AC_COPYRIGHT(GNU General Public License)
AM_CONFIG_HEADER([config.h])
# I would add these three
AC_CONFIG_MACRO_DIR([m4])
AM_PROG_LIBTOOL
AC_PROG_INSTALL
AC_PROG_CXX
AM_INIT_AUTOMAKE([1.9 foreign])
AC_CONFIG_FILES(Makefile)
AC_ENABLE_SHARED
AC_DISABLE_STATIC
LT_INIT
AC_OUTPUT

也在你的Makefile中。如果这是一个插件吗?(dlsym)然后我给出了推荐的插件标志:

ACLOCAL_AMFLAGS = -I m4
lib_LTLIBRARIES = libtest.la
libtest_la_SOURCES = hello.cpp
libtest_la_LDFLAGS = -module -avoid-version -export-dynamic

产生一个*。所以对我来说。

编辑:

我刚有个想法,你在哪里找你的*。所以文件?它位于创建的.libs/子文件夹中(不要错过名称开头的.(其隐藏)):

ls -l .libs/
total 24K
-rw-rw-r-- 1 galik galik 2.6K Aug 22 10:00 hello.o
-rw-rw-r-- 1 galik galik 2.7K Aug 22 10:00 libtest.a
lrwxrwxrwx 1 galik galik   13 Aug 22 10:00 libtest.la -> ../libtest.la
-rw-rw-r-- 1 galik galik  908 Aug 22 10:00 libtest.lai
-rwxrwxr-x 1 galik galik 8.6K Aug 22 10:00 libtest.so*