日期:2014-05-16  浏览次数:20893 次

makefile编写
我现在有二个项目A(A.h,A.cpp)/B(B.h,B.cpp),A要编译成一个静态库A.a,B要编译成一个动态库B.so,但A又调用了一个动太库C.so,这个makefile要怎么写呢?我是第一次接触linux,是个菜鸟,求高手帮忙写一个,越详细越好,万分感谢!!!


------解决方案--------------------
http://hi.baidu.com/36470902/blog/item/4405ff2ab9009925d52af13b.html
假设对于源文件hello.c,欲使其成为静态库,使用如下命令:
$ gcc -c hello.c -o libhello.o 首先编译成目标代码,但是不连接。
$ ar rcs libhello.a libhello.o 其中ar中的rcs的意思是: r表明将模块加入到静态库中,c表示创建静态库,s表示生产索引。

如果在test.c程序中要使用这个库,那么
$ gcc -c test.c -o test.o -I /home/include 

先将test.c编译成目标代码,然后再利用库进行连接 .-I 选项是直源程序头文件的自定义目录

$ gcc test.o -L /home/lib -lhello -o test

其中,-L /home/lib 表示这个库文件的存放位置。 -lhello 表示使用目录下名字为 libhello.o 的库,所以一般库的名称总是以libXXX开头的。

共享库的创建如下:

$gcc -fpic/fPIC  -c  source.c -o source.o
$gcc  -shared  -Wl,-soname=your_soname -o library_name file_list library_list
说明: -fpic或者-fPIC表明创建position independent code,这通常是创建共享库必须的。

-Wl 表明给链接器传送参数,所以这里-soname, library_name 为给链接器的参数。
-shared 表明是使用共享库

$gcc -shared -Wl,-soname, libmyab.so.1  -o  libmyab.so.1.0.1  a.o b.o  -lc
表示将a.o b.o创建成名为libmyab.so.1的共享库, -lc 表示 libc