编译命令

编译三个.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。

 

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

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值