Tôi đang tạo thư viện libgdata
có một số kiểm tra và chương trình không được cài đặt. Tôi đang chạy vào vấn đề mà một khi tôi đã cài đặt các thư viện một lần, các chương trình dường như được liên kết đến các phiên bản cài đặt và không phải là phiên bản địa phương trong ../src/libgdata.la
nữa.Tại sao phải tự động/tự động liên kết dự án với thư viện được cài đặt thay vì thư viện phát triển cục bộ?
Điều gì có thể gây ra điều này? Tôi đang làm điều gì đó khủng khiếp sai?
Đây là những gì test/Makefile.am
của tôi trông giống như:
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
là một thư viện mà có một số công cụ trợ giúp để đối phó với libcurl và libxml ++)
Vì vậy, ví dụ, nếu tôi chạy thử nghiệm mà không cần cài đặt bất cứ thứ gì, mọi thứ đều hoạt động tốt. Tôi có thể thực hiện các thay đổi cục bộ và chúng được các chương trình này thu thập ngay lập tức.
Nếu tôi cài đặt gói, các chương trình này sẽ biên dịch (có vẻ như nó thực sự trông cục bộ cho tiêu đề), nhưng khi tôi chạy chương trình, nó than phiền về các ký hiệu bị thiếu. Theo như tôi có thể nói, nó liên kết với thư viện mới được xây dựng (../src/libgdata.la) dựa trên đầu ra, vì vậy tôi không chắc tại sao điều này lại xảy ra. Nếu tôi loại bỏ các tập tin được cài đặt, các thay đổi cục bộ để src/* được chọn tốt.
Tôi đã bao gồm đầu ra cho gdatacalendar bên dưới.
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
Trợ giúp. :)
CẬP NHẬT
tôi nhận được các thông điệp sau khi tôi cố gắng để chạy các chương trình lịch khi tôi đã thêm các phương pháp addCommonRequestHeader()
đến lớp dịch vụ sau khi tôi đã cài đặt thư viện mà không có phương pháp 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_
Đề xuất của Eugene để thử đặt biến số $LD_LIBRARY_PATH
không hiệu quả.
CẬP NHẬT 2
tôi đã làm hai bài kiểm tra. Trước tiên, tôi đã làm điều này sau khi thổi đi thư mục dev-install của tôi (--prefix) và trong trường hợp đó, nó tạo ra test/.libs/lt-gdatacalendar
. Một khi tôi đã cài đặt thư viện, mặc dù, nó tạo ra test/.libs/gdatacalendar
thay thế. Đầu ra của ldd giống nhau cho cả hai với một ngoại lệ:
# 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)
Điều gì sẽ gây ra điều này để tạo lt-gdatacalendar trong một trường hợp nhưng gdatacalendar trong trường hợp khác?
Kết quả của ldd trên libgdata là:
[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)
thể bạn cũng gửi sản lượng ldd lt-gdatacalendar – Eugene
Và sau đó sản lượng của ldd trên tất cả các libs của bạn – Eugene
Hm, tiền tố lt- đây là những gì thực sự? – Eugene