As Alexander Langer wrote:
> HU?
> Das war bei mir bis jetzt immer voellig egal:
Dann hast Du's nur noch nie bemerkt.
> alex:~ $ cc --shared -o libtestlib.a testlib.c
Die hättest Du besser .so nennen sollen...
> alex:~ $ cc -o testlibuse libtestlib.a testlibuse.c
Beim Linken einer shared lib wird lediglich diese Tatsache im
Executable vermerkt, die eigentliche Symbolauflösung geschieht erst
zur Laufzeit (teilweise jedenfalls, ein prinzipieller Test auf gar
nicht aufgelöste Symbole erfolgt bereits am Ende des Linkvorganges).
Wäre libtestlib.a statisch gewesen, hätte es geknallt:
$ cc -o testlibuse -L. -ltestlib testlibuse.c
/tmp/ccw52450.o: In function `main':
/tmp/ccw52450.o(.text+0x4): undefined reference to `bla'
Man sollte also besser nochmal mit statischem Linken gegentesten...
> > Die Libs müssen immer als letztes stehen.
> > cc -o testpg -I... -L... testpq.c -lpq
>
> Wo steht das?
> SYNOPSIS
> gcc [ option | filename ]...
Man pages sind, gerade bei so einem Werk wie gcc, nicht ein und alles.
Erste Antwort: es war (in Unix) schon immer so. :-)
Zweite Antwort: Posix sagt, daß das so sein soll. :-))
(Wobei das ganz sicher mit der ersten Antwort verknüpft ist, Posix
hat ja an vielen Stellen den `state of the art' aufgeschrieben.)
A.1 c89 - Compile Standard C programs
A.1.1 Synopsis
c89 [-c] [-D name[=value]] ... [-E] [-g] [-I directory] ...
[-L directory] ... [-o outfile] [-O] [-s] [-U name] ... operand
...
[...]
- The -l library operands have the format of options, but their
position within a list of operands affects the order in which
libraries are searched.
[...]
-l library (The letter ell.) Search the library named:
liblibrary.a
A library shall be searched when its name is encountered,
so the placement of a -l operand is significant. Several
standard libraries can be specified in this manner, as
described in A.1.7. Implementations may recognize
implementation-defined suffixes other than .a as denoting
Dritte Antwort: RTFInfopages (``info gcc'')
`-lLIBRARY'
Search the library named LIBRARY when linking.
It makes a difference where in the command you write this option;
the linker searches processes libraries and object files in the
order they are specified. Thus, `foo.o -lz bar.o' searches
library `z' after file `foo.o' but before `bar.o'. If `bar.o'
refers to functions in `z', those functions may not be loaded.
-- cheers, J"org joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE Never trust an operating system you don't have sources for. ;-) To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Thu 11 Nov 1999 - 20:50:17 CET