- 论坛徽章:
- 1
|
实验如下:
同时编写三个源码文件
hello.c- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main ( void )
- {
- hello1();
- hello2();
- return 0;
- }
复制代码 hello1.c- #include <stdio.h>
- #include <stdlib.h>
- void hello1()
- {
- printf("hello , i am hello1\n");
- return;
- }
复制代码 hello2.c- #include <stdio.h>
- #include <stdlib.h>
- void hello2()
- {
- printf("hello , i am hello2\n");
- return;
- }
复制代码 先将 hello1.c 和 hello2.c 编译成动态链接库 libhello.so
再将 hello1.c 和 hello2.c 编译成静态链接库 libhello.a
如何编译成动态库和静态库,请搜索论坛 sco 版块,记得 sunlan 老大曾发过一个帖子,不再重复叙述。
下面是关键的一步。
我们首先看看:
cc -o hello hello.o -L. -lhello
编译会生成一个 hello 的可执行文件,我们执行一下看看,咦,咋提示找不到动态链接库 libhello.so ?
进行如下操作:
LD_LIBRARY_PATH=${LIBRARY_PATH}:/usr/work/src/test/
export LD_LIBRARY_PATH
再执行一下看看? ./hello
OK , 程序顺利的打出两行。
由此可见,前面的编译操作链接的是动态链接库 libhello.so
我们再来执行编译操作
cc -dn -o hello hello.o -L. -lhello
编译同样会生成一个 hello 的可执行文件。
清除 LD_LIBRARY_PATH 环境变量
unset LD_LIBRARY_PATH
set 一下看看,我们发现环境变量 LD_LIBRARY_PATH 已经被清除了。
再次执行一下看看 ./hello
程序顺利打出两行信息。
总结:
在默认情况下,cc 编译成可执行文件的时候,如果在 -L 指向的路径下同时存在动态链接库和静态链接库,系统默认链接的是动态链接库。
cc -o hello hello.o -L. -lhello 相当于是 cc -dy -o hello hello.o -L. -lhello
如果强制编译器链接静态库,应使用 -dn 的参数
cc -dn -o hello hello.o -L. -lhello |
|