立即注册 登录
气象家园 返回首页

lifestyle http://bbs.06climate.com/?12776 [收藏] [复制] [分享] [RSS]

日志

#转载#makefile的选项CFLAGS、CPPFLAGS、LDFLAGS和LIBS的区别

已有 489 次阅读2017-1-11 16:23 |个人分类:转载

#转载# from http://blog.csdn.net/jfkidear/article/details/8262260
makefile的选项CFLAGS、CPPFLAGS、LDFLAGS和LIBS的区别

"LDFLAGS是选项,LIBS是要链接的库。都是喂给ld的,只不过一个是告诉ld怎么吃,一个是告诉ld要吃什么。"
网上不难搜索到上面这段话。不过“告诉ld怎么吃”是什么意思呢?

看看如下选项:
LDFLAGS = -L/var/xxx/lib -L/opt/MySQL/lib                      LDFLAGS告诉链接器从哪里寻找库文件
LIBS = -lmysqlclient -liconv                                             LIBS告诉链接器要链接哪些库文件

这就明白了。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将会设置这个选项, 链接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。

------------------------------------------------------------------------------------------------------------------------
PS:-Wl,R在GraphicsMagick环境下,用为-R, 也就是LDFLAGS = -L/var/xxx/lib -R/var/xxx/lib

CFLAGS 或 CPPFLAGS的用法
CPPFLAGS='-I/usr/local/libjpeg/include -I/usr/local/libpng/include'

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

返回顶部