2012-05-09 49 views
5

मेरे पास कुछ सी ++ कक्षाएं हैं और मैं उन्हें autotools और 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: ये मेरी configure.ac और 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 केवल स्थिर libs बनाता है, हालांकि मैं कॉन्फ़िगर कहते हैं - साझा ऑब्जेक्ट्स बनाने के लिए स्क्रिप्ट को स्पष्ट रूप से निर्देशित करने के लिए अक्षम-स्थैतिक - सक्षम-साझा किया गया। मेरी फाइलों में क्या गलत है?

--- संपादित करें ---

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

संपादित करें आपके config.ac में, AC_PROG_LIBTOOL अनावश्यक है। LT_INIT इसे बदल देता है। –

उत्तर

4

libtool किसी भी तरह का मानना ​​है कि यह एक मंच है कि साझा पुस्तकालयों का समर्थन नहीं करता पर है, तो यह केवल आप पर ध्यान नहीं देता और बनाता है इसके बजाय स्थैतिक पुस्तकालयों। मुझे लगता है कि आप क्रॉस-कंपाइलिंग कर रहे हैं, शायद libtool को पता नहीं है कि लक्षित प्लेटफ़ॉर्म के लिए साझा लाइब्रेरीज़ कैसे बनाएं।

आप एक लाइन की तरह

कुछ जाँच ... कोई

और फिर पढ़ा config.log क्यों पता लगाने के लिए कि क्या साझा पुस्तकालयों का निर्माण करने का कहना है के लिए अपने configure उत्पादन जांचना चाहेंगे ।

+0

मैंने कॉन्फ़िगर किया - host = arm, होना चाहिए - host = arm-linux। धन्यवाद। – Zbigh1