2012-05-09 12 views
5

私はC++クラスをいくつか持っており、autotoolsとlibtoolを使ってそれらを共有ライブラリにコンパイルしたいと思います。これらは私のconfigure.acとMakefile.amファイルです:Libtoolは静的ライブラリのみを作成します - 共有オブジェクトが必要です

configure.ac:

AC_PREREQ(2.67) 
AC_INIT(somelib.so, 1.0, [email protected]) 
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:I configureを呼び出すものの

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は唯一、静的LIBSを作成します - disable-static - 共有オブジェクトを作成するようにスクリプトに明示的に指示するための共有。私のファイルに何が問題なのですか?

--- EDIT ---

の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' 
+0

リンカーの実行時に実際のリンク線はどのように見えますか? – HonkyTonk

+0

最初の投稿を編集しました – Zbigh1

+0

configure.acには、AC_PROG_LIBTOOLは冗長です。 LT_INITはそれを置き換えます。 –

答えて

4

libtoolは何とかそれは共有ライブラリをサポートしていないプラットフォーム上だと考えているならば、それは単にあなたを無視し、構築します代わりに静的ライブラリ。私はあなたがクロスコンパイルしているのを見て、おそらくlibtoolはターゲットプラットフォームの共有ライブラリを構築する方法を知らないでしょう。その後、あなたは共有ライブラリを構築するかどうかをチェック

のようなものを言うのラインのためのあなたのconfigure出力をチェックしたいと思う

...ない

とは理由を見つけるためにconfig.logを読みます。

+0

私はconfigure --host = armを使用しました。--host = arm-linuxでなければなりません。ありがとう。 – Zbigh1

関連する問題