在Linux下如何使用自己的库函数
一
使用库必要性
提高代码重用性。
二
库的种类:
1
静态库
一般以
*.a
命名。
程序编译时被加载,此后,只要程序不被重新编译,静态库就没有作用了(可以删掉)。
由
于静态库的代码在编译过程中已经被载入可执行程序,因此体积较大,如果有多个应用程序都用了同一个静态库,在存放可执行程序的硬盘中就会有这个静态库的多
份拷贝。如果他们同时在运行,那么在内存中也会有这个静态库的多份拷贝。但是如下面提到的动态库相比较,程序执行时间比较短,因为没有执行时库函数的加
载。所谓“以空间换时间”。
下面我们用一个实例说明静态库的编程和使用。
//
库函数:
hellowlib.c
#include <stdlib.h>
void printhellow()
{
printf("hellow,now in lib routine\n");
return ;
}
首先生成目标文件:
gcc -c
printhellow.c
–o printhellow.o
然后使用
ar
(
archive
)命令把目标文件制作库文件:
ar cqs libhello.a printhellow.o
注意库文件名一定是
lib***.a
格式,不要忘了加
lib
作为前缀。
下面我们写一个程序调用静态库
libhello.a
中的
printhellow
函数。
//testlib.c
int main(int arc, char **argv)
{
printhellow();
return ;
}
下面编译:
gcc -o testlib testlib.c -L ./
-lhello
即可生成可执行文件
testlib
。
注意上面的
-L
(大写)指示库的路径在当前目录下。如果没有这个选项,就需要把库
libhello.a
加入到标准路径中。如
/usr/lib
中。
-l
(小写)只需要跟
hello
,其他字符全部不要,否则出错。
2
动态库(共享库)
一般以
.so
命名(
share object
)
与静态库不同,共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。与上面提到的静态库相比,很是节约空间。但运行时需要载入,因此运行时间相对静态库而言比较长。所谓“以时
相关文档:
1. Workqueue
Workqueue的名字就和他的功能一样:需要处理的工作列表和工作的添加删除(貌似没有看到如何删除的)、以及工作的调度执行。
需要处理的工作列表通常都维护在内核对象workqueue_struct里面。系统里面可以有多个workqueue_struct。 ......
嵌入式系统与通用PC机不同,一般没有硬盘这样的存储设备而是使用Flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置,本文分析了嵌入式系统中常用的存储设备及其管理机制,介绍了常用的基于FLASH的文件系统类型。
1.嵌入式系统存储设备及其管理机制分析
构建适用于嵌入式系统的Li ......
目录结构为:
inc/hello.h
src/hello.c
main/main.c
Makefile
文件内容为:
hello.h:
void hello(char name[]);
hello.c:
#include <stdio.h>
void hello(char name[])
{
printf("Hello %s!\n", name);
}
main.c:
#include <stdio.h>
#include "hello.h"
// The second hello.h should ......
LINUX(运行在VWMARE)上自带的SVN,Windows上装的是TortoiseSVN-1.6.7.18415-win32-svn-1.6.9.msi。
在Linux上配置SNV。
1、创建repository。
> svnadmin create /myhome/svnhome/project
其中svnhome是放svn的目录,下一级是不同的repository名。
2、准备好源代码。按下列目录排好。
project/branches
project/ ......
# tar -zxvf mysql-5.0.45.tar.gz -C /usr/src/
# cd /usr/src/mysql-5.0.45
# ./configure --prefix=/usr/local/mysql --with-charset=gbk
--localstatedir=/usr/local/mysql/data
# make
# make install
# groupadd mysql
# useradd mysql -g mysql
# cd /usr/local/mysql/bin
# ./mysql_install_db --user=mys ......