मैं एक पुस्तकालय libgdata
कुछ परीक्षण और गैर इंस्टॉल किए गए प्रोग्राम है कि बना रहा हूं। मैं इस समस्या में चला रहा हूँ कि एक बार मैं पुस्तकालय एक बार स्थापित किया है, कार्यक्रम अब किसी भी स्थापित संस्करण को जोड़ने जा करने के लिए और नहीं ../src/libgdata.la
में स्थानीय संस्करण लगते हैं।स्थानीय विकास पुस्तकालय की बजाय स्थापित लाइब्रेरी के खिलाफ ऑटोकॉन्फ़/ऑटोमेक प्रोजेक्ट लिंक क्यों करेगा?
यह क्या कारण हो सकता है? क्या मैं कुछ गलत कर रहा हूँ?
INCLUDES = -I$(top_srcdir)/src/ -I$(top_srcdir)/test/
# libapiutil contains all of our dependencies!
AM_CXXFLAGS = $(APIUTIL_CFLAGS)
AM_LDFLAGS = $(APIUTIL_LIBS)
LDADD = $(top_builddir)/src/libgdata.la
noinst_PROGRAMS = gdatacalendar gdatayoutube
gdatacalendar_SOURCES = gdatacalendar.cc
gdatayoutube_SOURCES = gdatayoutube.cc
TESTS = check_bare
check_PROGRAMS = $(TESTS)
check_bare_SOURCES = check_bare.cc
,
तो उदाहरण के लिए (libapiutil
एक और पुस्तकालय libcurl और libxml ++ से निपटने के लिए कुछ सहायक सामान है कि), अगर मैं परीक्षण चलाने:
यहाँ क्या मेरी test/Makefile.am
लगता है कि है कुछ भी स्थापित किए बिना, सब कुछ ठीक काम करता है। मैं स्थानीय रूप से परिवर्तन कर सकता हूं और उन्हें तुरंत इन कार्यक्रमों द्वारा उठाया जाता है।
मैं पैकेज स्थापित करते हैं, तो इन कार्यक्रमों संकलन होगा (ऐसा लगता है जैसे कि यह वास्तव में हेडर के लिए स्थानीय स्तर पर दिखता है), लेकिन यह याद आ रही प्रतीकों के बारे में शिकायत एक बार मैं इस कार्यक्रम चलाते हैं।
जहां तक मैं कह सकता हूं, यह मेक आउटपुट के आधार पर नव निर्मित लाइब्रेरी (../src/libgdata.la) के खिलाफ जुड़ा हुआ है, इसलिए मुझे यकीन नहीं है कि यह क्यों हो रहा है। अगर मैं स्थापित फाइलों को हटा देता हूं, तो src/* में स्थानीय परिवर्तनों को ठीक से उठाया जाता है।
मैं नीचे gdatacalendar के लिए मेकअप उत्पादन शामिल किया है।
g++ -DHAVE_CONFIG_H -I. -I.. -I../src/ -I../test/ -I/home/altern8/workspaces/4355/dev-install/include -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include -I/usr/include/libxml2 -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -g -O2 -MT gdatacalendar.o -MD -MP -MF .deps/gdatacalendar.Tpo -c -o gdatacalendar.o gdatacalendar.cc
mv -f .deps/gdatacalendar.Tpo .deps/gdatacalendar.Po
/bin/bash ../libtool --tag=CXX --mode=link g++ -I/home/altern8/workspaces/4355/dev-install/include -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include -I/usr/include/libxml2 -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -g -O2 -L/home/altern8/workspaces/4355/dev-install/lib -lapiutil -lcurl -lgssapi_krb5 -lxml++-2.6 -lxml2 -lglibmm-2.4 -lgobject-2.0 -lsigc-2.0 -lglib-2.0 -o gdatacalendar gdatacalendar.o ../src/libgdata.la
mkdir .libs
g++ -I/home/altern8/workspaces/4355/dev-install/include -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include -I/usr/include/libxml2 -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -g -O2 -o .libs/gdatacalendar gdatacalendar.o -L/home/altern8/workspaces/4355/dev-install/lib /home/altern8/workspaces/4355/dev-install/lib/libapiutil.so /usr/lib/libcurl.so -lgssapi_krb5 /usr/lib/libxml++-2.6.so /usr/lib/libxml2.so /usr/lib/libglibmm-2.4.so /usr/lib/libgobject-2.0.so /usr/lib/libsigc-2.0.so /usr/lib/libglib-2.0.so ../src/.libs/libgdata.so -Wl,--rpath -Wl,/home/altern8/workspaces/4355/dev-install/lib
creating gdatacalendar
सहायता। :)
अद्यतन
मैं निम्न संदेश मिलता है जब मैं जब मैं के बाद मैं addCommonRequestHeader()
विधि के बिना पुस्तकालय स्थापित किया था सेवा वर्ग के लिए addCommonRequestHeader()
विधि जोड़ दिया है कैलेंडर कार्यक्रम चलाने के लिए प्रयास करें।
/home/altern8/workspaces/4355/libgdata/test/.libs/lt-gdatacalendar:
symbol lookup error:
/home/altern8/workspaces/4355/libgdata/test/.libs/lt-gdatacalendar:
undefined symbol:
_ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_
यूजीन के सुझाव की स्थापना $LD_LIBRARY_PATH
चर मदद नहीं की कोशिश करने के लिए।
अद्यतन 2
मैं दो परीक्षण किया था। सबसे पहले, मैं अपने देव-स्थापित निर्देशिका (उपसर्ग) दूर उड़ाने के बाद ऐसा किया और कहा कि मामले में, यह test/.libs/lt-gdatacalendar
पैदा करता है। एक बार जब मैंने लाइब्रेरी स्थापित की है, तो, यह इसके बजाय test/.libs/gdatacalendar
बनाता है।
# before install
# ldd test/.libs/lt-gdatacalendar
libgdata.so.0 => /home/altern8/workspaces/4355/libgdata/src/.libs/libgdata.so.0 (0xb7c32000)
# after install
# ldd test/.libs/gdatacalendar
libgdata.so.0 => /home/altern8/workspaces/4355/dev-install/lib/libgdata.so.0 (0xb7c87000)
क्या इस एक मामले लेकिन दूसरे में gdatacalendar में LT-gdatacalendar बनाने के लिए कारण होगा: ldd के उत्पादन में एक अपवाद के साथ दोनों के लिए एक ही है?
libgdata पर ldd के उत्पादन में है:
[email protected]:~/workspaces/4355/libgdata$ ldd /home/altern8/workspaces/4355/libgdata/src/.libs/libgdata.so.0
linux-gate.so.1 => (0xb7f7c000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7f3b000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7dec000)
/lib/ld-linux.so.2 (0xb7f7d000)
आप भी अपने सभी libs पर ldd LT-gdatacalendar – Eugene
के उत्पादन में और फिर ldd के उत्पादन में पोस्ट कर सके – Eugene
हम्म, क्या इस lt- उपसर्ग वास्तव में है? – Eugene