当前位置: 技术问答>linux和unix
makefile编写
来源: 互联网 发布时间:2016-12-11
本文导语: 我现在有二个项目A(A.h,A.cpp)/B(B.h,B.cpp),A要编译成一个静态库A.a,B要编译成一个动态库B.so,但A又调用了一个动太库C.so,这个makefile要怎么写呢?我是第一次接触linux,是个菜鸟,求高手帮忙写一个,越详细越好,万分感...
我现在有二个项目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
假设对于源文件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