makefile中一些编译器选项
CFLAGS CXXFLAGS
- CFLAGS 表示用于 C 编译器的选项
- CXXFLAGS 表示用于 C++ 编译器的选项
- 这两个变量实际上涵盖了__编译__和__汇编__两个步骤
- 指定头文件(.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将会设置这个选项,链接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。
LD_LIBRARY_PATH环境变量
- __指定__的共享库/动态库搜索路径(运行阶段使用)
echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/lib64/:/usr/local/lib/:/usr/lib64/:/usr/lib/:/lib/:/lib64/ :/usr/local/cuda-8.0/lib64/" >> /home/worker/.bashrc
- 配置文件/etc/ld.so.conf 与 ldconf
- 待补充
头文件、库文件的搜索顺序
待更新
头文件
静态库
动态库
参考资料
原文地址:https://www.cnblogs.com/wangzhiyi/p/9508973.html
时间: 2024-11-19 11:54:19