使用Autotools生成一个.so文件
Generating a .so file with Autotools
我想使用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*
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 如何在makefile中添加.c,.cc和.so文件以创建另一个.so
- Android NDK生成海量只有一个功能的.so文件
- 我应该把Boost.Python的.so文件放在哪里,这样我就可以把它作为一个模块导入,以及我如何将它与Python 2
- 在 Android 的第二个项目中添加一个 .so 库
- CMakeLists.txt有两个子项目和自己的CMakeLists.txt只需要创建一个.so库,该库包含所有子项目
- 如何创建一个仅包含 C 代码包装C++代码的 .so 文件 - 与 OpenCV 相关
- 从两个子目录中的代码创建一个 .so 文件
- 在另一个文件中链接/使用 .so 文件
- so文件:从另一个so文件调用的函数
- Java - 我有一个库(.a/.so)和header(.h),如何使用Java调用它们的函数?
- 使用Autotools生成一个.so文件
- 链接/注册一个.so文件
- 是否可以在Android Studio中使用.so作为输出构建一个本地模块
- 从Android NDK中的c++代码直接调用另一个.so文件中的函数