库的生成和使用

库的生成
========
ar cqs libtest.a test.o
ar r libtest.a test.o

gcc -c -fPIC -o test.o test.c
gcc -shared -Wl,soname,libtest.so.1.0 test.o

ar
==
operations:
d Delete modules from the archive.
q Quick append; Historically, add the files member… to the end of archive, without checking for
replacement.
r Insert the files member… into archive (with replacement).
t Display a table listing the contents of archive.
x Extract members (named member) from the archive.

modifiers:
a Add new files after an existing member of the archive.
b Add new files before an existing member of the archive.
s Write an object-file index into the archive, or update an existing one, even if no other change is
made to the archive.

Link Option
===========
-Bdynamic
-dy
-call_shared
Link against dynamic libraries. Only meaningful on platforms for which shared libraries are
supported.

-Bstatic
-dn
-non_shared
-static
Do not link against shared libraries. Only meaningful on platforms for which shared
libraries are supported.

Code Generation
===============
-fpic
Generate position-independent code (PIC) suitable for use in a shared library, if supported for the
target machine. Such code accesses all constant addresses through a global offset table (GOT). The
dynamic loader resolves the GOT entries when the program starts (the dynamic loader is not part of
GCC; it is part of the operating system). If the GOT size for the linked executable exceeds a
machine-specific maximum size, you get an error message from the linker indicating that -fpic does
not work; in that case, recompile with -fPIC instead. (These maximums are 8k on the SPARC and 32k on
the m68k and RS/6000. The 386 has no such limit.)

Position-independent code requires special support, and therefore works only on certain machines.
For the 386, GCC supports PIC for System V but not for the Sun 386i. Code generated for the IBM
RS/6000 is always position-independent.

-fPIC
If supported for the target machine, emit position-independent code, suitable for dynamic linking and
avoiding any limit on the size of the global offset table. This option makes a difference on the
m68k and the SPARC.

Position-independent code requires special support, and therefore works only on certain machines.

Reference
=========
http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html


相关文章

Speak Your Mind

If you want a pic to show with your comment, go get a gravatar!