现在的位置: 首页 > 综合 > 正文

编译命令

2012年10月21日 ⁄ 综合 ⁄ 共 1085字 ⁄ 字号 评论关闭

编译三个.c文件:

gcc initapi.c randapi.c test.o -o test  编译成可执行映像

编译成库的形式:

gcc -c -Wall initapi.c (-c 表示只编译不链接,-Wall打开全部警告设置)

gcc -c -Wall randapi.c

ar -cru libmyrand.a initapi.o randapi.o (产生一个库,c指明构建静态库,r替换库中已经存在的目标,u安全选项,更新替换)

使用这个库:

gcc test.c -L. -lmyrand -o test (L.告诉gcc库可在当前目录下找到 -l选项指定了要使用的库)

 

ar 的t选项可以用来查看静态库中包含的内容,d移除,x提取,v显示详细

要生成地址无关的源文件,使用PIC选项:

gcc -fPIC -c initapi.c

gcc -fPIC -c randapi.c

使用-shared标志在此基础上创建一个共享库:

gcc -shared initapi.o randapi.o -o libmyrand.so (share object)

使用这个库:

gcc test.c -L. -lmyrand -o test

ldd命令查看test映像依赖于哪些共享库。

 

还有一种动态加载库,它在运行时加载,而不像共享库那样在程序启动时加载。(DLL)

主要使用一些加载函数:dlopen打开库,dlerror,dlsym获得函数句柄,dlclose

 

 

Makefile文件示例:

VPATH= lib app                                       //指定了make依据生成规则查找源文件的路径

LIBSRC= lib.c bar.c

//源文件和目标文件列表,供生成规则使用

LIBOBJ= $(LIBSRC:.c=.o)

APPSRC= main.c app.c

APPOBJ= $(APPSRC:.c=.o)

//一些编译器标志

CFLAGS=

INCLUDES= -I ./lib

//默认生成目标,生成库和程序

all: libexp.a appex

//将源文件转化为目标文件的规则

%.o:%.c

        $(CC) -c $(CFLAGS) $(INCLUDES) -o $@ $<

//如何构建库

libexp.a: $(LIBOBJ)

        $(AR) cru libexp.a $(LIBOBJ)

//如果构建程序

appex: $(APPOBJ) libexp.a

        $(CC) -o appex $(APPOBJ) -lexp -L.

其他的如清除目标、所包含头文件的依赖跟踪、安装生成二进制码的方法等,构成一个完整的Makefile。

 

可以使用自动工具来构建。

 

 

 

 

 

 

 

抱歉!评论已关闭.