我想使用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
我从here得到了这个想法,但当我输入时:
autoreconf -i
./configure
make
我得到了一个libtest.la文件,但遗憾的是没有.so文件。如果有帮助的话,我通常将hello.cpp编译成hello.so:
g++ -Wall -shared -rdynamic -fPIC hello.cpp -o hello.so
如果有人告诉我我做错了什么,我会感激不尽,所以我终于得到了.so文件。
答案 0 :(得分:3)
我认为您需要将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*