CFLAGS、CXXFLAGS、LDFLAGS与LIBS

CFLAGS 表示用于 C 编译器的选项
CXXFLAGS 表示用于 C++ 编译器的选项。
这两个变量实际上涵盖了编译和汇编两个步骤。

CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。

LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果明明安装了某个包,而安装另一个包时,它愣是 说找不到,可以抒那个包的lib路径加入的LDFALGS中试一下。

LIBS:告诉链接器要链接哪些库文件,如LIBS = -lpthread -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将会设置这个选项,链 接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。

时间: 2024-10-01 04:44:17

CFLAGS、CXXFLAGS、LDFLAGS与LIBS的相关文章

Makefile 选项 CFLAGS 、LDFLAGS 、LIBS

CFLAGS 表示用于C编译器的选项 CXXFLAGS 表示用于C++编译器的选项 这两个变量实际上涵盖了编译和汇编的两个步骤 CFLAGS:指定头文件(.h)的路径,如:CFLAGS=-I/usr/include -I/path/include .同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来. LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置.用法:LDFLAGS=

linuxC编译参数CPPFLAGS、CFLAGS、LDFLAGS参数的理解

CPPFLAGS : 预处理器需要的选项 如:-I (大写i指定头文件路径)CFLAGS:编译的时候使用的参数 –Wall –g -cLDFLAGS :链接库使用的选项 –L -l (大写L指定动态库的路径,小写L指定动态库的名称) 原文地址:https://www.cnblogs.com/yongfengnice/p/11789651.html

Linux下Makefile学习笔记

makefile 可以用于编译和执行多个C/C++源文件和头文件. (1) #include "file.h" 和 #include <file.h> 的区别 #include "file.h" 会先在当前目录下查找file.h,然后才在系统头文件目录中进行查找: #include <file.h>会先查找系统头文件目录,默认是不会在当前目录下查找的. (2) 关于在头文件中使用#ifndef 和 #define 头文件的主要作用在于多个代码

小型C/C++项目的makefile编写

[前言]在我所接触到的Linux嵌入式开发中,大多使用的是C语言,采用makefile文件对源文件进行编译后生成可执行文件.本文即从个人经历上介绍小型的C项目如何编写makefile文档. 一.gcc命令 从目的上看,gcc命令和makefile的功能是一样,即是把源文件编译后生成可执行文件或.o二进制文件.gcc命令中有许多的额外的参数,本文仅介绍以下几种最简单和常用的方法: 有helloworld.c文件如下: #include <stdio.h> int main() { printf(

最简单的基于FFmpeg的移动端样例:IOS HelloWorld

===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:Android HelloWorld 最简单的基于FFmpeg的移动端样例:Android 视频解码器 最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版 最简单的基于FFmpeg的移动端样例:Android 推流器 最简单的基于FFmpeg的移动端样例:Android 视频转

PHP-redis英文文档

作为程序员,看英文文档是必备技能,所以尽量还是多看英文版的^^ PhpRedis The phpredis extension provides an API for communicating with the Redis key-value store. It is released under the PHP License, version 3.01. This code has been developed and maintained by Owlient from November

最简单的基于FFmpeg的移动端例子:IOS HelloWorld

本文记录IOS平台下基于FFmpeg的HelloWorld程序.该示例C语言的源代码来自于<最简单的基于FFMPEG的Helloworld程序>.相关的概念就不再重复记录了. IOS程序使用FFmpeg类库的说明 IOS应用程序使用FFmpeg类库的流程如下所示. 1. 编译FFmpeg类库 编译IOS的FFmpeg类库需要支持5种架构:armv7.armv7s.arm64.i386.x86_64.其中前面3个是给真机使用的,后面2个是给模拟器使用的.本文记录的FFmpeg类库还支持第三方类库

【转】交叉编译faac共享库

转自:http://blog.csdn.net/cjj198561/article/details/38382889 编译准备 1.代码下载 在mac下面执行:wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz 也可以用网页打开下载,不过我用网页打开下载老是失败,后来就命令下载一次性成功. 2.代码编译 下载以后解压文件,解压以后的文件名修改为faac 3.写脚本文件 编写b

GCC 编译优化指南

前言 网上关于编译优化的文章很多,但大多零零散散,不成体系,本文试图给出一个完整和清晰的优化思路,同时提供在实践中如何进行优化的详尽参考.但是,在介绍所有优化知识之前首先引用LFS-Book中的一句忠告:"使用编译器优化得到的小幅度性能提升,与它带来的风险相比微不足道".你还要进行优化吗? %@&#=^%~*# ... OK, crazy guy! Let's Go!! 在继续之前,作者还是奉劝各位:如果追求极致的优化,那么它将是一件既耗时又麻烦的事情,你会陷入无止尽的测试.测