actual link requirements (was: r13637 - gnucash/trunk - Add more linker flags)

Christian Stimming stimming at tuhh.de
Thu Mar 16 04:43:16 EST 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Derek Atkins schrieb:
> Yeah, I figured it would have moved the problem.  Unfortunately
> this is where the windows linker and the mac linker are....
> incompatible.   This is particularly an issue in that a
> "loadable module" != "shared library", but gnucash treats
> them the same.

A few days ago I was wondering why libgncgnome_la_SOURCES in
src/gnome/Makefile.am had some source files from backend/file listed,
but obviously here's the answer: If the shared library needs symbols
from backend/file and cannot link against the loadable module, you
should list the source files directly into the library's SOURCES
variable. That's what we probably need to do for
libgncmod-business-backend-file as well. It looks extremly ugly, though :-/

The change in r13642 actually didn't change anything in the library
requirements of libgncmod-business-backend-file, but it moved the
dependency on libgnc-backend-file from libgncmod-business-core to
libgw-business-core. Before we continue to guess these dependencies I
thought I'd try to figure out a way to actually print the real
dependencies; see below for a couple of one-liners to do so. I used them
to determine the linking requirements of business-core; see below for
the results before and after 13642, which show the newly introduced
dependency of libgw-business-core on libgnc-backend-file...

Christian


# All in top-level of gnucash build tree

# Create table of all exported symbols
nm -A `find . -name '*.so'` | grep ' T ' | \
  sed 's/^\([^:]*\).* \([^ ]*\)$/\1: \2/' > allsymbols

# For a particular library, check symbol import
# requirements, listing all symbols (needs the file from above)
A=src/gnc-module/.libs/libgw-gnc-module.so && echo "$A requirements:" \
  && nm $A | grep ' U ' | sed 's/^.* \([^ ]*\)$/\1/' | \
  grep -f- allsymbols

# For a particular library, check import
# requirements, summarized by library
A=src/gnc-module/.libs/libgw-gnc-module.so && echo "$A requirements:" \
  && nm $A | grep ' U ' | sed 's/^.* \([^ ]*\)$/\1/' | \
  grep -f- allsymbols | cut -d: -f1 | sort | uniq

# List all import requirements
# summarized by library for a full directory
for $A in `find src/business/business-core -name '*.so'`; do \
  echo -e "\n##$A requirements:" && nm $A | grep ' U ' | \
  sed 's/^.* \([^ ]*\)$/\1/' | \
  grep -f- allsymbols | cut -d: -f1 | sort | uniq; done


######
# Link requirements of src/business/business-core before r13642
# (IIRC that is r13637)
##
src/business/business-core/file/.libs/libgncmod-business-backend-file.so
requirements:
./lib/libqof/qof/.libs/libqof.so
./src/backend/file/.libs/libgnc-backend-file.so
./src/business/business-core/.libs/libgncmod-business-core.so
./src/engine/.libs/libgncmod-engine.so
./src/gnc-module/.libs/libgncmodule.so
./src/gnome/.libs/libgncgnome.so

## src/business/business-core/.libs/libgw-business-core.so requirements:
./lib/libqof/qof/.libs/libqof.so
./src/business/business-core/.libs/libgncmod-business-core.so
./src/engine/.libs/libgw-engine.so

## src/business/business-core/.libs/libgncmod-business-core.so requirements:
./lib/libqof/qof/.libs/libqof.so
./src/backend/file/.libs/libgnc-backend-file.so
./src/engine/.libs/libgncmod-engine.so
./src/engine/.libs/libgw-engine.so
./src/gnc-module/.libs/libgncmodule.so
./src/gnome/.libs/libgncgnome.so


######
# Link requirements of src/business/business-core after r13642
# (at r13645)
##
src/business/business-core/file/.libs/libgncmod-business-backend-file.so
requirements:
./lib/libqof/qof/.libs/libqof.so
./src/backend/file/.libs/libgnc-backend-file.so
./src/business/business-core/.libs/libgncmod-business-core.so
./src/engine/.libs/libgncmod-engine.so
./src/gnc-module/.libs/libgncmodule.so
./src/gnome/.libs/libgncgnome.so

## src/business/business-core/.libs/libgw-business-core.so requirements:
./lib/libqof/qof/.libs/libqof.so
./src/backend/file/.libs/libgnc-backend-file.so
./src/business/business-core/.libs/libgncmod-business-core.so
./src/engine/.libs/libgncmod-engine.so
./src/engine/.libs/libgw-engine.so
./src/gnome/.libs/libgncgnome.so

## src/business/business-core/.libs/libgncmod-business-core.so requirements:
./lib/libqof/qof/.libs/libqof.so
./src/engine/.libs/libgncmod-engine.so
./src/gnc-module/.libs/libgncmodule.so

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQCVAwUBRBkzNGXAi+BfhivFAQJAmwQAmHVZ+HlkiA7jx7DuJJ7XQSy2biQPowee
rAzBadeh98RW+pOMdrXUibOU7F3Ft0xkPenAEhW38ZAkgmfexMC3j0Jc0hryfO51
gaDaMLqF96VV/oQZGEzfWW59M8JBbtPSrjq/jQlizPH5YntUXI8OY7YvKf3pmYud
NJuv+av2qfA=
=s++T
-----END PGP SIGNATURE-----


More information about the gnucash-devel mailing list