2012-05-09 32 views
5

Birkaç C++ sınıfım var ve bunları otomatik kitaplıklar ve libtool kullanarak bir paylaşılan kitaplığa derlemek istiyorum. Configure diyoruz rağmenLibtool yalnızca statik kitaplık oluşturuyor - Paylaşılan nesnelere ihtiyacım var

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'un yalnızca statik kütüphanelerini oluşturur: -

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 Bunlar benim configure.ac ve Makefile.am dosyalarıdır Paylaşılan nesneleri oluşturmak için komut dosyasını açık bir şekilde yönlendirmesi için statik olmayan --enable-shared'i devre dışı bırakın. Dosyalarımın nesi var?

--- DÜZENLEME --- libtool'un gelen

bağlantı komut:

/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

Bağlayıcı çalıştırıldığında gerçek bağlantı çizgisi nasıl görünür? – HonkyTonk

+0

İlk gönderi düzenlendi – Zbigh1

+0

Yapılandırmanızda AC_PROG_LIBTOOL gereksizdir. LT_INIT onu değiştirir. –

cevap

4

Libtool nedense paylaşılan kütüphaneleri desteklemeyen bir platformda olduğuna inanıyor ise, sadece sizi yok sayar ve inşa bunun yerine statik kütüphaneler. Çapraz derleme yaptığınızı görüyorum, belki de libtool hedef platform için paylaşılan kütüphaneleri nasıl kuracağını bilmiyor.

Sen

gibi bir şey ...

ve sonra config.log okumak hiç nedenini öğrenmek için paylaşılan kütüphaneleri oluşturmak için olmadığını kontrol diyen bir hat için configure çıkışını kontrol etmek isteyeceksiniz

.

+0

configure --host = arm kullandim, --host = arm-linux olmali. Teşekkürler. – Zbigh1