Ich erstelle eine Bibliothek libgdata
, die einige Tests und nicht installierte Programme hat. Ich stoße auf das Problem, dass, sobald ich die Bibliothek einmal installiert habe, die Programme scheinen, mit der installierten Version und nicht der lokalen Version in ../src/libgdata.la
länger zu verbinden.Warum sollte autoconf/automake Projekt Link anstelle der lokalen Entwicklungsbibliothek gegen installierte Bibliothek?
Was könnte das verursachen? Mache ich etwas schrecklich falsch?
Hier ist, was meine test/Makefile.am
wie folgt aussieht:
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
eine andere Bibliothek, die für den Umgang mit libcurl und libxml ++ einige Helfer Sachen hat)
So zum Beispiel, wenn ich die Tests laufen ohne etwas installiert zu haben, funktioniert alles gut. Ich kann Änderungen lokal vornehmen und sie werden sofort von diesen Programmen abgeholt.
Wenn ich das Paket installiere, werden diese Programme kompilieren (es sieht so aus, als ob es tatsächlich lokal nach den Headern sucht), aber sobald ich das Programm starte, beschwert es sich über fehlende Symbole.
Soweit ich das beurteilen kann, ist es eine Verknüpfung mit der neu erstellten Bibliothek (../src/libgdata.la) basierend auf der make-Ausgabe, also bin ich mir nicht sicher, warum das passieren würde. Wenn ich die installierten Dateien entferne, werden die lokalen Änderungen an src/* gut aufgenommen.
Ich habe die make-Ausgabe für gdatacalendar unten enthalten.
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
Hilfe. :)
UPDATE
Ich erhalte die folgenden Meldungen, wenn ich versuche, das Kalender-Programm zu laufen, wenn ich die addCommonRequestHeader()
Methode, um die Service-Klasse hinzugefügt habe, nachdem ich die Bibliothek ohne die addCommonRequestHeader()
Methode installiert hatte.
/home/altern8/workspaces/4355/libgdata/test/.libs/lt-gdatacalendar:
symbol lookup error:
/home/altern8/workspaces/4355/libgdata/test/.libs/lt-gdatacalendar:
undefined symbol:
_ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_
Eugene Vorschlag Einstellung zu versuchen, die $LD_LIBRARY_PATH
Variable nicht helfen.
UPDATE 2
habe ich zwei Tests. Zuerst habe ich das getan, nachdem ich mein dev-install-Verzeichnis (-Prefix) weggeblasen habe und in diesem Fall test/.libs/lt-gdatacalendar
erstellt habe. Sobald ich die Bibliothek installiert habe, wird stattdessen test/.libs/gdatacalendar
erstellt. Die Ausgabe von ldd ist für beide gleich mit einer Ausnahme:
# 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)
Was würde dazu führen, dies lt-gdatacalendar in einem Fall aber gdatacalendar in einer anderen zu schaffen?
Die Ausgabe von ldd auf libgdata ist: erste
[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)
Könnten Sie auch die Ausgabe von ldd Post lt-gdatacalendar – Eugene
Und dann Ausgabe von ldd auf allen Libs – Eugene
Hm, was ist der LT- Präfix in der Tat? – Eugene