【问题标题】:Generating a .so file with Autotools使用 Autotools 生成 .so 文件
【发布时间】:2014-10-16 01:33:33
【问题描述】:

我想使用 Autotools 来创建一个 .so 文件,以便我可以使用 dlsym 加载它。我已经阅读了一些类似的主题,但没有一个建议的解决方案对我有用。这是我所拥有的:

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

配置.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

我从here 得到这个想法,但是当我输入时:

    autoreconf -i
    ./configure
    make

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

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

如果有人告诉我我做错了什么,我将不胜感激,以便我最终得到 .so 文件。

【问题讨论】:

    标签: c++ makefile autotools shared-libraries


    【解决方案1】:

    我认为您需要将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.am 中? (dlsym) 然后我给出了插件推荐的标志:

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

    这为我生成了一个 *.so。

    编辑:

    我刚刚想到,您在哪里寻找您的 *.so 文件?它位于创建的.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*
    

    【讨论】:

    • 我可以在另一个目录中生成.so吗?
    • 抱歉不知道是否可以在.libs/以外的其他目录生成文件
    • 好的,但这仍然对我有用。我用更复杂的插件试了一下,用dlsym打开。
    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2015-03-02
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多