seen on various linux architectures, building apt results in a library with several additional weak symbols defined. trying to build and link a program (built with the changed compiler version) to the apt library built with the older compiler version results in a link failure, shown below. rebuilding the library with the changed compiler lets the application link again. - on the 4.1 branch, the additional symbols seem to be the result of a part of the r116763 checkin; reverting the changes for PR26195 restores the old behaviour. - not yet searched on mainline; the change is between 20060815 and 20060923. is this a bug in apt's use in #pragma interface? g++ -g -O2 -o synaptic gsynaptic.o gtkpkglist.o rgaboutpanel.o rgcacheprogress.o rgpkgcdrom.o rgpreferenceswindow.o rgfetchprogress.o rgfiltermanager.o rgfindwindow.o rgiconlegend.o rglogview.o rgmisc.o rgsetoptwindow.o rgdummyinstallprogress.o rgdebinstallprogress.o rgterminstallprogress.o rginstallprogress.o rgslideshow.o rgtaskswin.o rgcdscanner.o rgmainwindow.o rgpkgdetails.o rgrepositorywin.o rgvendorswindow.o rgsummarywindow.o rgchangeswindow.o rguserdialog.o rgwindow.o rggladewindow.o ../common/libsynaptic.a -lapt-pkg -lapt-inst -lglade-2.0 -lgtk-x11-2.0 -lxml2 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXfixes -lcairo -lX11 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lvte -lncurses -lXft -lgtk-x11-2.0 -lpangoxft-1.0 -lpangox-1.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXfixes -lcairo -lX11 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -llaunchpad-integration -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXfixes -lpango-1.0 -lcairo -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lpthread rgpkgcdrom.o: In function `pkgCdromStatus': /usr/include/apt-pkg/cdrom.h:20: undefined reference to `vtable for pkgCdromStatus' rgpkgcdrom.o: In function `~pkgCdromStatus': /usr/include/apt-pkg/cdrom.h:21: undefined reference to `vtable for pkgCdromStatus' rgpkgcdrom.o: In function `pkgCdromStatus': /usr/include/apt-pkg/cdrom.h:20: undefined reference to `vtable for pkgCdromStatus' rgpkgcdrom.o: In function `~pkgCdromStatus': /usr/include/apt-pkg/cdrom.h:21: undefined reference to `vtable for pkgCdromStatus' /usr/include/apt-pkg/cdrom.h:21: undefined reference to `vtable for pkgCdromStatus' rgpkgcdrom.o:/usr/include/apt-pkg/cdrom.h:21: more undefined references to `vtable for pkgCdromStatus' follow rgpkgcdrom.o:(.rodata._ZTV11RGCDScanner[vtable for RGCDScanner]+0x10): undefined reference to `pkgCdromStatus::SetTotal(int)' rgpkgcdrom.o:(.rodata._ZTV11RGCDScanner[vtable for RGCDScanner]+0x20): undefined reference to `pkgCdromStatus::GetOpProgress()' rgpkgcdrom.o:(.rodata._ZTI11RGCDScanner[typeinfo for RGCDScanner]+0x10): undefined reference to `typeinfo for pkgCdromStatus' rgmainwindow.o: In function `~pkgCdromStatus': /usr/include/apt-pkg/cdrom.h:21: undefined reference to `vtable for pkgCdromStatus' ../common/libsynaptic.a(rpackagecache.o): In function `~RPkgPolicy': /tmp/2/synaptic-0.57.11ubuntu9/common/rpackagecache.h:40: undefined reference to `pkgPolicy::~pkgPolicy()' /tmp/2/synaptic-0.57.11ubuntu9/common/rpackagecache.h:40: undefined reference to `pkgPolicy::~pkgPolicy()' ../common/libsynaptic.a(rpackagelister.o): In function `pkgArchiveCleaner': /usr/include/apt-pkg/clean.h:20: undefined reference to `vtable for pkgArchiveCleaner' ../common/libsynaptic.a(rpackagelister.o): In function `~pkgArchiveCleaner': /usr/include/apt-pkg/clean.h:28: undefined reference to `vtable for pkgArchiveCleaner' /usr/include/apt-pkg/clean.h:28: undefined reference to `vtable for pkgArchiveCleaner' /usr/include/apt-pkg/clean.h:28: undefined reference to `vtable for pkgArchiveCleaner' collect2: ld returned 1 exit status
Created attachment 12355 [details] difference of symbols (objdump -T) sources and binaries for the shared library at http://people.ubuntu.com/~doko/apt/
This seems more like an ABI issue in older 4.1's and 4.2's rather than a bug in the newer 4.1.2 and 4.2.0. I bet we had an accidental ABI change in 4.0.0 and we have no fixed that. I am thinking we should close this as a non bug. "#pragma interface" should be killed really, all it does is bring trouble.
As suggested. Please re-open only with a proper testcase.