静态库的生成步骤:
1 写源程序 add.c,保存退出。
2 编译源程序,得到目标文件(.o文件)。
gcc -c
3 打包生成静态库文件
ar -r lib名字.a xx.o (.o文件可以多个)
库文件名字 命名规范:以lib开头,以 .a结束
注:在调用静态库时,需要库文件和头文件。
静态库的调用步骤:
1 写调用的源程序 test.c ,保存退出
2 编译代码,生成 .o文件。
3 连接test.o 和 静态库,连接方式有三种:
a) gcc test.o lib名字.a (直接连)
b) 先配置环境变量LIBRARY_PATH,把静态库文件所在的路径配置进去,然后:
gcc test.o -l库名字 (库名字去掉lib和.a)
c) gcc test.o -l库名字 -L库路径
注:Unix多用第三种方式。
共享库的生成步骤:
1 编写源程序 add.c,保存退出。
2 编译源程序,生成 .o文件。
gcc -c -fpic add.c (不写-fpic也行)
3 生成共享库文件(.so)
gcc -shared add.o -olib名字.so
也需要提供头文件。
共享库的使用步骤:
共享库的使用步骤 与 静态库基本相同。
注:共享库的连接方式和静态库一样,但在运行时需要额外配置环境变量 LD_LIBRARY_PATH,否则就找不到库文件。
export LD_LIBRARY_PATH=.
ldd 命令可以查看共享库的调用关系。
共享库还有一种特殊的使用方式,就是像打开一个文件一样的使用。
步骤:
1 打开一个共享库文件。dlopen()
2 在打开的共享库文件中获取一个函数。dlsym
3 执行函数。
4 关闭共享库文件。dlclose()
dlerror() 处理错误信息。
dlopen()有两个参数,第一个参数是文件名,第二个参数必须是:RTLD_LAZY 或 RTLD_NOW,区别:
RTLD_LAZY - 延迟加载,open时不真正加载,到使用时再加载。
RTLD_NOW - 现在加载,open的同时完成加载
dlerror()在调用 dlopen/dlsym/dlclose之后立刻调用,效果:如果上面的函数出现错误,返回错误信息,如果没有错误,返回NULL。
C程序员的错误处理
C语言通过函数的返回值代表错误,方式:
1 如果返回值 是 指针类型,一般用NULL(0)代表出错。特殊情况下,用 -1 代表出错。
2 返回值是int类型,如果返回数据不可能是负数,可以用 -1 代表出错,其他数据正常返回。
3 返回值是int类型,如果返回数据可能是负数,需要用指针取出返回数据,返回值不再返回数据,而是代表是否出错,-1代表出错,0代表成功。
4 如果不需要考虑是否出错,返回值用void。
注:以上4种方式只是惯例,不是一定如此。
1 写源程序 add.c,保存退出。
2 编译源程序,得到目标文件(.o文件)。
gcc -c
3 打包生成静态库文件
ar -r lib名字.a xx.o (.o文件可以多个)
库文件名字 命名规范:以lib开头,以 .a结束
注:在调用静态库时,需要库文件和头文件。
静态库的调用步骤:
1 写调用的源程序 test.c ,保存退出
2 编译代码,生成 .o文件。
3 连接test.o 和 静态库,连接方式有三种:
a) gcc test.o lib名字.a (直接连)
b) 先配置环境变量LIBRARY_PATH,把静态库文件所在的路径配置进去,然后:
gcc test.o -l库名字 (库名字去掉lib和.a)
c) gcc test.o -l库名字 -L库路径
注:Unix多用第三种方式。
共享库的生成步骤:
1 编写源程序 add.c,保存退出。
2 编译源程序,生成 .o文件。
gcc -c -fpic add.c (不写-fpic也行)
3 生成共享库文件(.so)
gcc -shared add.o -olib名字.so
也需要提供头文件。
共享库的使用步骤:
共享库的使用步骤 与 静态库基本相同。
注:共享库的连接方式和静态库一样,但在运行时需要额外配置环境变量 LD_LIBRARY_PATH,否则就找不到库文件。
export LD_LIBRARY_PATH=.
ldd 命令可以查看共享库的调用关系。
共享库还有一种特殊的使用方式,就是像打开一个文件一样的使用。
步骤:
1 打开一个共享库文件。dlopen()
2 在打开的共享库文件中获取一个函数。dlsym
3 执行函数。
4 关闭共享库文件。dlclose()
dlerror() 处理错误信息。
dlopen()有两个参数,第一个参数是文件名,第二个参数必须是:RTLD_LAZY 或 RTLD_NOW,区别:
RTLD_LAZY - 延迟加载,open时不真正加载,到使用时再加载。
RTLD_NOW - 现在加载,open的同时完成加载
dlerror()在调用 dlopen/dlsym/dlclose之后立刻调用,效果:如果上面的函数出现错误,返回错误信息,如果没有错误,返回NULL。
C程序员的错误处理
C语言通过函数的返回值代表错误,方式:
1 如果返回值 是 指针类型,一般用NULL(0)代表出错。特殊情况下,用 -1 代表出错。
2 返回值是int类型,如果返回数据不可能是负数,可以用 -1 代表出错,其他数据正常返回。
3 返回值是int类型,如果返回数据可能是负数,需要用指针取出返回数据,返回值不再返回数据,而是代表是否出错,-1代表出错,0代表成功。
4 如果不需要考虑是否出错,返回值用void。
注:以上4种方式只是惯例,不是一定如此。