微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Libtool只创build静态库 – 我需要共享对象

我有几个C ++类,我想使用autotools和libtool将它们编译到共享库中。 这些是我的configure.ac和Makefile.am文件

configure.ac:

AC_PREREQ(2.67) AC_INIT(somelib.so,1.0,someone@somewhere.com) AC_LANG(C++) AM_INIT_AUTomake(somelib,1.0) LT_INIT([disable-static]) AM_disABLE_STATIC AM_PROG_LIBTOOL AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL AC_CONfig_SRCDIR([Logger.cpp]) AC_CONfig_HEADER([config.h]) # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_SUBST(LIBTOOL_DEPS) AC_LTDL_DLLIB AC_PROG_RANLIB AC_SUBST(LIBTOOL_DEPS) AC_LTDL_DLLIB # Checks for libraries. # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([cstring unistd.h pthread.h]) # Checks for typedefs,structures,and compiler characteristics. AC_HEADER_STDBOOL AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T # Checks for library functions. AC_FUNC_MALLOC AC_FUNC_REALLOC AC_TYPE_SIGNAL AC_CHECK_FUNCS([mkdir strdup dup2]) AC_CHECK_LIB(pthread,pthread_create,[],[ echo "ERROR!: libpthread not found!"; exit -1],[]) AC_CHECK_LIB(xml2,htmlReadMemory,[ echo "ERROR!: libxml2 not found!"; exit -1],[]) AC_CONfig_MACRO_DIR([m4]) AC_OUTPUT(Makefile)

Makefile.am:

AUTomake_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 CPPFLAGS = `xml2-config --cflags` -g -fPIC -Wall -O2 AM_LDFLAGS = `xml2-config --libs` -pthread -shared -L$(libdir) -L.libs -lboost_iostreams -lz -lbz2 -L/shared/hudson/arm/lib -I/shared/hudson/arm/include LIBVER=1:0:0 lib_LTLIBRARIES = somelib.la somelib_la_SOURCES = <sources go here> somelib_la_LDFLAGS = -version-info $(LIBVER) library_includedir=$(includedir)/os library_include_HEADERS = <headers go here>

Libtool只创build静态库,尽pipe我调用configure –disable-static –enable-shared来明确地指示脚本创build共享对象。 我的文件有什么问题?

在Linux服务器上更改autoconf版本

kdevelop 3.5:configure:error:C ++编译器不能创build可执行文件

autoconfconfiguration结果在C std lib头相关的编译错误

为什么我无法用autoconf2.6x构buildautoconf,它的版本比2.6更新

Automake – 安装版本“automake-1.14.1”的困难

—编辑—

从libtool链接cmd:

/bin/bash ./libtool --tag=CXX --mode=link arm-cortex_a8-linux-gnueabi-g++ -g -O2 -version-info 1:0:0 -o somelib.la -rpath /usr/local/lib AutoMutex.lo IniParser.lo Logger.lo Mutex.lo ProcInfo.lo Timer.lo XmlDocContainer.lo XmlNode.lo XmlParser.lo XmlSchemaValidator.lo XmlTree.lo ByteArray.lo IXmlEngine.lo LoggerSetup.lo Process.lo Thread.lo Utils.lo XmlError.lo XmlObjectEngine.lo XmlSchemaEngine.lo XmlSimpleEngine.lo Unziper.lo MUTool.lo -lxml2 -lpthread -ldl -ldl libtool: link: arm-cortex_a8-linux-gnueabi-ar cru .libs/somelib.a AutoMutex.o IniParser.o Logger.o Mutex.o ProcInfo.o Timer.o XmlDocContainer.o XmlNode.o XmlParser.o XmlSchemaValidator.o XmlTree.o ByteArray.o IXmlEngine.o LoggerSetup.o Process.o Thread.o Utils.o XmlError.o XmlObjectEngine.o XmlSchemaEngine.o XmlSimpleEngine.o Unziper.o MUTool.o libtool: link: arm-cortex_a8-linux-gnueabi-ranlib .libs/somelib.a libtool: link: ( cd ".libs" && rm -f "somelib.la" && ln -s "../somelib.la" "somelib.la" ) make[1]: Leaving directory `/home/bg/workspace/git/somelib/src'

automake子目录对象被禁用

在Ubuntu 11.04上的autoconf错误

Automake:依赖于构build结果

我可以通过使用AC_XXXX_CONfig语法把我的macros定义到config.h吗?

如何避免重新定义VERSION,PACKAGE等

如果libtool以某种方式相信它在不支持共享库的平台上,它就会忽略你并建立静态库。 我看到你正在交叉编译,也许libtool不知道如何为目标平台建立共享库。

你会想要检查你的configure输出的行说,类似的东西

检查是否构建共享库…不

然后阅读config.log来找出原因。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐