LDFLAGS, LIBS, CSFLAGS

转自:

http://canlynet.blog.163.com/blog/static/25501365201192624955734/

LDFLAGS是选项,LIBS是要链接的库。都是喂给ld的,只不过一个是告诉ld怎么吃,一个是告诉ld要吃什么。

网上不难搜索到上面这段话。不过“告诉ld怎么吃”是什么意思呢?

看看如下选项:

LDFLAGS+= \
-L${OSPKGS_ROOTFS}/usr/lib \
-L$(MXLIBS_ROOTFS)/usr/lib \
-L${MXLIBS_ROOTFS}/lib/ \
-L$(MAX_ROOTFS)/usr/lib \
-L$(MXAPPS_ROOTFS)/usr/lib \
-lavinterface \
-lasound \
-ldatabase \

LIBS = -lmysqlclient -liconv

这就明白了。LDFLAGS告诉链接器从哪里寻找库文件,LIBS告诉链接器要链接哪些库文件。不过使用时链接阶段这两个参数都会加上,所以你即使将这两个的值互换,也没有问题。


说到这里,进一步说说LDFLAGS指定-L虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这两个库给"-Wl,R"

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib

如果在执行./configure以前设置环境变量export LDFLAGS="-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib" ,注意设置环境变量等号两边不可以有空格,而且要加上引号哦(shell的用法)。那么执行configure以后,Makefile将会设置这个选项,链接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。

CFLAGS+= \
	-I${OSPKGS_ROOTFS}/usr/include \
	-I$(MAX_ROOTFS)/include \
	-I$(MXLIBS_ROOTFS)/include \
	-I$(MXAPPS_ROOTFS)/include \
	-I./include  \
	-Wall \
	-DFIXED_POINT
CFLAGS 你可以看成是gcc(或gcc同类编译器)编译命令的一部分。
通常情况下我们编译源代码的时候因为需求不同等原因会加上各种各样选项和参数,而通过修改CFLAGS这一变量来达到在它作用域范围内修改编译命令的目的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值