Chinaunix首页 | 论坛 | 博客
  • 博客访问: 442921
  • 博文数量: 113
  • 博客积分: 446
  • 博客等级: 下士
  • 技术积分: 1229
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-09 16:01
个人简介

Let's go!!!!!

文章分类

全部博文(113)

文章存档

2019年(5)

2018年(4)

2017年(9)

2016年(5)

2015年(39)

2014年(6)

2013年(28)

2012年(17)

分类: LINUX

2013-05-20 12:43:45

第一步:
新建目录library,进入library。在library中创建3个目录,apps,vendor1,vendor2。
在apps中创建main.c文件
#include
#include "module1.h"
#include "module2.h"
int main()
{
   module_init();
   func1();
   module_exit();
   return 0;
}

在vendor1中创建exit.c,init.c文件,module1.h
#include
void module_exit()
{
   printf("Good bye!\n");
}                               //exit.c

#include
void module_init()
{
   printf("Hello world!\n");        //init.c
}

#ifndef __MODULE1_H
#define __MODULE1_H
void module_init(void);
void module_exit(void);
#endif                        //module.h

执行gcc exit.c –c –static  生成exit.o
执行gcc init.c –c –static  生成init.o
拷贝exit.o,init.o,module1.h到app目录下

在vendor2目录下创建func1.c,mudule2.h
#include
void func1()
{
   printf("Coming function %s\n",__FUNCTION__);
}
   
#ifndef __MODULE2_H
#define __MODULE2_H
void func1(void);
#endif

执行gcc func1.c –c –static  生成func1.o
拷贝func1.o,module2.h到apps目录下

进入apps目录,执行命令与结果如下
[lingyun@localhost apps]$ gcc main.c func1.o exit.o init.o -o test
[lingyun@localhost apps]$ ./test
Hello world!
Coming function func1
Good bye!

第二步(静态库):
在vendor1目录中使用命令ar -rsv libmodule1.a *.o,将所有.o文件打包。
将libmodule1.a  module1.h拷贝到apps目录下
在vendor2目录中使用命令ar -rsv libmodule2.a *.o,将所有.o文件打包。
将libmodule3.a  module2.h拷贝到apps目录下
进入apps目录,删除第一步中的.o文件,执行命令
gcc main.c -L. -lmodule1 -lmodule2 -o test
执行./test将会有相同的结果。
-L.表示在当前目录找库文件。
-l表示要连接的库文件。

如果我们刚才没有吧libmodule1.a,module1.h和libmodule2.a,module2.h拷贝到本目录,
编译命令为gcc main.c -I ../vendor1/ -I ../vendor2/ -L ../vendor1 -lmodule1 -L ../vendor2/ -lmodule2 -o test
gcc main.c -I ../vendor1/ -I ../vendor2/ -L ../vendor1 -lmodule1 -L ../vendor2/ -lmodule2  -static -o test


第三步(动态库):
gcc -O -fpic -shared  -o libmodule1.so *.c
gcc main.c -I ../vendor1 -I ../vendor2 -L ../vendor1 -lmodule1 -L ../vendor2 -lmodule2 -o test
[lingyun@localhost apps]$ ./test
./test: error while loading shared libraries: libmodule1.so: cannot open shared object file: No such file or directory
执行test时提示错误,因为动态编译的程序是在运行时加载库文件,现在程序找不到库文件。
export LD_LIBRARY_PATH=/home/lingyun/caijie/library/vendor2:/home/lingyun/caijie/library/vendor1:
用环境变量LD_LIBRARY_PATH导出动态库路径。  

阅读(1061) | 评论(0) | 转发(0) |
0

上一篇:gcc g++ cpp cll as系列工具

下一篇:目录树

给主人留下些什么吧!~~