linux 生成和使用动态链接库和静态链接库的Makefile编写
2014-07-16 17:21
316 查看
生成和使用动态链接库和静态链接库的Makefile编写
1. 概述
介绍linux下生成和使用动态链接库和静态链接库的Makefile的编写方法。
2. 生成动态链接库的Makefile
首先要有一个c或c++等工具编写出来的库函数文件,也就是里面写了一堆可以被别的函数调用的函数。比如:
aaa.cpp
#include <stdio.h>
void pf1(void)
{
printf(“********\n”);
return;
}
void pf2(void)
{
printf(“#########\n”);
return;
}
接着要写编译这个函数的Makefile
要把一个文件编译成动态链接库文件需要分两个步骤
第一步:将这个文件编译成.o文件
CPP=c++
CPPFLAGS=-c
$(CPP) $(CPPFLAGS) aaa.cpp -o aaa.o
这里是编译cpp文件,就用的是C++,如果是编译.c文件,就需要使用gcc
第二步:将这个.o文件链接成动态链接库文件
LD=ld
LIB = libaaa.so
$(LD) -shared -o $(LIB) haspapi.o
动态链接库文件的名字一定要以lib开头,后缀是.so
编译中一定要加上-shared,表示是生成动态链接库
3. 生成静态链接库
还是使用上面的文件,编写Makefile
同样也是分两步,第一步和上面一样,我直接拷贝过来
第一步:将这个文件编译成.o文件
CPP=c++
CPPFLAGS=-c
$(CPP) $(CPPFLAGS) aaa.cpp -o aaa.o
这里是编译cpp文件,就用的是C++,如果是编译.c文件,就需要使用gcc
第二步:将这个.o文件链接成静态链接库文件
LIB = libaaa.a
AR=ar
(AR) -r $(LIB) aaa.o
静态链接库文件的后缀是.a,同样也是需要以lib开头
4. 链接库的使用
首先需要编写一个使用了链接库文件中函数的c或者c++文件
bbb.cpp
extern void pf1(void);
extern void pf2(void);
int main(void)
{
pf1();
pf2();
return 0;
}
使用链接库,Makefile文件如下:
$(CPP) bbb.cpp -I. -L. -o bbb.o -laaa
这里不分是动态的还是静态的,但是,如果使用动态链接库,运行时需要将aaa.so文件拷贝到/usr/lib下,静态库则不需要。
上面的例子是在redhat9上运行测试过的。
1. 概述
介绍linux下生成和使用动态链接库和静态链接库的Makefile的编写方法。
2. 生成动态链接库的Makefile
首先要有一个c或c++等工具编写出来的库函数文件,也就是里面写了一堆可以被别的函数调用的函数。比如:
aaa.cpp
#include <stdio.h>
void pf1(void)
{
printf(“********\n”);
return;
}
void pf2(void)
{
printf(“#########\n”);
return;
}
接着要写编译这个函数的Makefile
要把一个文件编译成动态链接库文件需要分两个步骤
第一步:将这个文件编译成.o文件
CPP=c++
CPPFLAGS=-c
$(CPP) $(CPPFLAGS) aaa.cpp -o aaa.o
这里是编译cpp文件,就用的是C++,如果是编译.c文件,就需要使用gcc
第二步:将这个.o文件链接成动态链接库文件
LD=ld
LIB = libaaa.so
$(LD) -shared -o $(LIB) haspapi.o
动态链接库文件的名字一定要以lib开头,后缀是.so
编译中一定要加上-shared,表示是生成动态链接库
3. 生成静态链接库
还是使用上面的文件,编写Makefile
同样也是分两步,第一步和上面一样,我直接拷贝过来
第一步:将这个文件编译成.o文件
CPP=c++
CPPFLAGS=-c
$(CPP) $(CPPFLAGS) aaa.cpp -o aaa.o
这里是编译cpp文件,就用的是C++,如果是编译.c文件,就需要使用gcc
第二步:将这个.o文件链接成静态链接库文件
LIB = libaaa.a
AR=ar
(AR) -r $(LIB) aaa.o
静态链接库文件的后缀是.a,同样也是需要以lib开头
4. 链接库的使用
首先需要编写一个使用了链接库文件中函数的c或者c++文件
bbb.cpp
extern void pf1(void);
extern void pf2(void);
int main(void)
{
pf1();
pf2();
return 0;
}
使用链接库,Makefile文件如下:
$(CPP) bbb.cpp -I. -L. -o bbb.o -laaa
这里不分是动态的还是静态的,但是,如果使用动态链接库,运行时需要将aaa.so文件拷贝到/usr/lib下,静态库则不需要。
上面的例子是在redhat9上运行测试过的。
相关文章推荐
- linux 生成和使用动态链接库和静态链接库的Makefile编写
- linux 生成和使用动态链接库和静态链接库的Makefile编写
- [备份使用]Makefile编写动态链接库和静态链接库demo
- 转载:JNI 编写动态链接库 HelloNative 详细过程(也即用Java和C在Linux下动态生成并使用so文件过程)
- Linux 静态链接库与动态链接库之一:静态链接库生成及使用
- Linux下Makefile中动态链接库和静态链接库的生成与调用
- JNI 编写动态链接库 HelloNative 详细过程(也即用Java和C在Linux下动态生成并使用so文件过程)
- [转]Linux下使用autoconf和automake生成Makefile
- Linux 静态链接库与动态链接库之二:动态链接库生成及使用
- Linux 下使用gcc生成so(动态链接库)文件
- Qt 静态链接库的生成及使用 【附加动态链接库】 转自百度空间 Ayuyuan
- [Linux-C++] Make 的使用和Makefile的编写
- linux库文件编写入门 && 使用和生成库
- Linux下的动态链接库与静态链接库的生成与使用
- 在Linux下使用qmake生成makefile
- linux库文件编写入门 && 使用和生成库
- linux编译生成动态链接库与静态链接库
- linux下生成,使用静态和动态链接库
- GCC 编译动态链接库和静态链接库 + 大型工程Makefile编写 + Linux环境变量的设置和查看方法
- linux下Eclipse进行C编程时动态链接库的生成和使用