2012-01-18 18 views
23

कुछ स्रोत फ़ाइल test.cpp दिए गए हैं, मैं एक साझा लाइब्रेरी libtest.so बनाना चाहता हूं। मैं इसे ऑटोमैक फ़ाइल के दायरे में करने की कोशिश कर रहा हूं, हालांकि मुझे यह काम करने के लिए प्रतीत नहीं होता है।एक स्वचालित लाइब्रेरी में एक साझा लाइब्रेरी (.so) कैसे बनाएं?

g++ -shared -fPIC test.cpp -o libtest.so 

तो मैं इस प्रकार एक अन्य फ़ाइल है कि शेयर की गई लाइब्रेरी पर निर्भर करेगा बना सकते हैं::

g++ mytest.cpp libtest.so -o blah 

मुझे लगता है कि पढ़ा है

जी के तहत उदाहरण के लिए ++ मैं तो निम्न कार्य करें automake केवल libtool के माध्यम से साझा पुस्तकालय बनाने का समर्थन करता है। मैंने अपने ऑटोमेक स्क्रिप्टिंग को निम्नानुसार काम करने की कोशिश की है, लेकिन ऐसा कभी नहीं लगता है। निकटतम मैं मिल गया है है यह एक .la और ओ फ़ाइल का उत्पादन करने के लिए:

configure.ac में

:

AC_ENABLE_SHARED 
AC_DISABLE_STATIC 
AC_PROG_LIBTOOL(libtool) 

Makefile.am

lib_LTLIBRARIES=libtest.la 
libtest_la_SOURCES=test.cpp 
libtest_la_CFLAGS=-fPIC 
libtest_la_CPPFLAGS=-fPIC 
libtest_la_CXXFLAGS=-fPIC 
libtest_la_LDFLAGS= -shared -fPIC 

किसी सका में मुझे उपरोक्त के आधार पर एक .so बनाने का एक उदाहरण दें?

+0

आपको AC_PROG_LIBTOOL को LT_INIT –

+1

बह के साथ प्रतिस्थापित करना चाहिए ... इसे लिखने के बाद मुझे एहसास हुआ कि उपर्युक्त वास्तव में मेरी स्रोत निर्देशिका की छिपी हुई .libs निर्देशिका में .so फ़ाइल बनाते हैं। उम्मीद है कि यह किसी और की मदद करता है जो इस बारे में चमत्कार करता है। – skimon

+2

क्या कोई यहां फाइलों के पूर्ण उदाहरण पोस्ट कर सकता है? स्रोत फाइल नहीं, लेकिन config.ac और Makefile.am। मैं इस धागे में जानकारी का उपयोग करके यह काम नहीं कर सकता। –

उत्तर

19

तुम सिर्फ configure.ac में और Makefile.am में LT_INIT डालें, तो कार्य करें:

 
lib_LTLIBRARIES = libtest.la 
libtest_la_SOURCES = test.cpp 
libtest_la_LDFLAGS = -version-info 0:0:0 

आप एक .so मिलना चाहिए। आपको -एफपीआईसी को CFLAGS, आदि निर्दिष्ट नहीं करना चाहिए। -वर्जन-जानकारी विनिर्देशक आवश्यक नहीं है, लेकिन यह एक अच्छा विचार है।

+0

यदि यह एक परीक्षण के लिए है और स्थापित नहीं किया जाना चाहिए, तो यह 'check_LTLIBRARIES' नहीं होना चाहिए? –

+0

@ जैक चेक_एलटी लाइब्रेरीज़ एक .so नहीं बनाएंगे! मुझे लगता है कि प्रश्न में "परीक्षण" उसी प्रकार के परीक्षण का जिक्र नहीं कर रहा है क्योंकि चेक_ उपसर्ग का तात्पर्य है। –