/*
* author: hjjdebug
* date: 2012
* title: linux 动态链接库的创建和使用静态连接法连接
*/
静态连接,不需要用户额外写代码,链接程序(gcc等)链接时指明动态连接库,并将所有外部符号从连接库中都找到。
例如你用的glibc库就是用静态连接法建立连接的,下面给出一个实例加深印象.了解其连接的过程,原理.
linux 动态链接库的创建和使用
1. 先创建一个动态链接库。源码如下:
$ cat max.cpp
int max(int a, int b)
{
return a>b? a:b;
}
编译生成动态库
g++ -shared -o libmax.so max.cpp
2. 再创建一个测试用例,源码如下:
$ cat test.cpp
#include <stdio.h>
int max(int a, int b);
int main(int argc, char *argv[])
{
int a=max(3,5);
printf("the bigger is %d\n",a);
return 0;
}
编译生成可执行文件
g++ -o test test.cpp -lmax -L`pwd`
这里说明一下 -lmax 是指明要链接libmax.so 文件 -L`pwd` 是说链接库位置在本地。
如果你把库copy 到系统路径下,通常是/lib 或/usr/lib 下, 则-L 选项不用添加。
3. 运行可执行文件。
$ ./test
如果你没有copy 库到系统目录下,会有加载错误,如下:
./test: error while loading shared libraries: libmax.so: cannot open shared object file: No such file or directory
把库copy 到系统目录。
sudo cp libmax.so /lib
再次执行 ./test, 成功!
the bigger is 5
遇到问题,请用工具查询。