.a
gcc -c test1.c test2.c(或者g++ -c test1.cpp test2.cpp )--- .o
ar -r libtest.a test1.o test2.o (或者 ar rcs libtest.a test1.o test2.o) --- .a
g++ -o main main.cpp -L. -ltest (或者 g++ -o main main.c libtest.a) -L. 代表当前路径
.so
gcc -fPIC -c file1.c
gcc -fPIC -c file2.c
gcc -shared libxxx.so file1.o file2.o
gcc file1.o file2.o -Lpath -lxxx -o program.exe
ldd program.exe ---查看链接情况;
在程序运行期间,也需要告诉系统去哪里找你的动态链接库文件。在UNIX下是通过定义名为 LD_LIBRARY_PATH 的环境变量来实现的。只需将path赋值给此变量即可
关于函数定义时包含的同名函数:
函数可以定义在3个地方1. 程序自身2. 静态库3. 动态库因为静态库是要链进程序的,所以函数定义在程序和静态库可以看成是一样的同名函数出现在程序和静态库中,链接时会报重定义的错误。同名函数出现在动态库中,编译链接都可以通过,但是调用会出问题,会出现覆盖问题。
定义在这3个地方的函数,会调用哪个函数呢?
1. 程序和静态库定义了同名函数,链接报错:重定义
2. 程序或静态库定义的同名函数,会覆盖动态库中定义的函数
3. 动态库中定义的同名函数,先链接覆盖后链接的函数