???????????????????C/C++????????????????????????????Щ?????????????Linux??????Linux?μ??????????????????
????Linux??????
????Linux??????????????????:

????1???????(.a): ???????????ó???????????????????
????2??????????(.so): ?????????????÷?: a) ??ó???????????????????????????????????????????????????????????????????????????????????????????????????????????; b) ?????????????????ж?????????????????????????????????????????б???????????????????????????????????????????????????????????????????
???????????
???????????lib????????????????????????в?????????????????????????????磺
????gcc src-file.c -lm -lpthread
????????????У???????libmath.a??libpthread.a
?????????(.a)
???????????????????£?
????· ????object????????磺cc -Wall -c ctest1.c ctest2.c?????????????ctest1.o??ctest2.o(????-Wall???????????????)??
????· ??????????????磺ar -cvq libctest.a ctest1.o ctest2.o??????????????libctest.a???
????· ???????ar -t??.a????а?????Щ.o????????????ar????????????????tar
????· ??????????ranlib libctest.a?????.a????????????Щar??????????????????ranlib?????
????.a?????windows?μ?.lib?????????
?????????(.so)
???????????????????£?
????????object???????-fPIC???
????gcc -Wall -fPIC -c *.c
????????????????????????????????(position independent)???????????????????????????????????????????????????????????????????????????????offset???е???????
???????-shared????
????gcc -shared -Wl??-soname??libctest.so.1 -o libctest.so.1.0 *.o
????-shared??????????????????????????????;-Wl??options??????????ld(??????)???????????????????У???????????????.o??????ld -soname ibctest.so.1
????????????
??????????????????????????libctest.so.1.0????????????????????????:
????mv libctest.so.1.0 /opt/lib
????ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so.1
????ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so
????libctest.so???????????????-lctest?????????????????libctest.so.1?????????????????
????gcc -Wall -I/path/to/include-files -L/path/to/libraries prog.c -lctest -o prog
??????????
???????ldd???????????????????????????磺
????ldd prog
????libctest.so.1 => /opt/lib/libctest.so.1 (0x00002aaaaaaac000)
????libc.so.6 => /lib64/tls/libc.so.6 (0x0000003aa4e00000)
????/lib64/ld-linux-x86-64.so.2 (0x0000003aa4c00000)
????obj???
????obj??????????????????????????????????????windows?μ?PE??linux???Щunix?μ?elf??macos??mach-o??aix?μ?xcoff??
??????obj?????????????????????nm objdump readelf???????
??????????????????
?????????????????????????????????????????/etc/ld.so.conf??????ldconfig?????????????????????·????????????/etc/ld.so.cache???????Щ????????????????????(Linux/Solaris: LD_LIBRARY_PATH?? SGI: LD_LIBRARYN32_PATH?? AIX: LIBPATH?? Mac OS X: DYLD_LIBRARY_PATH?? HP-UX: SHLIB_PATH)
????????????ж????
?????????ó????????????????????????????????????ж?????????????????????????????????????????????????????????????????????????????????????????????????
???????dlfcn.h?е?dlopen??dlsym??dlclose???????????????
????????????dlfcn??????????????????-rdynamic????????????????????з????????????????????????????????????????????????????類static???ε???????????????????????.dynsym?????
????GNU Libtool
??????????????????????libtool?????libtool????????????????????????????????????libtool?????????????????.la???????.la????????????????????????.a????????????Щ?汾?????