gcc编译选项

Posted dissipate

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gcc编译选项相关的知识,希望对你有一定的参考价值。

  

添加库文件路径:
1:导出环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/new_path
2:修改配置文件
ld.so.conf ld.so.conf.d/*


LIBRARY_PATH 程序编译期间查找动态链接库时指定的查找路径,编译期,开发阶段, 只影响静态链接库
LD_LIBRARY_PATH 程序加载运行期间,查找动态链接库的路径(except 默认路径)
指定动态连接器(ld)查找ELF可执行文件运行时所依赖的动态链接库(so)路径
ld(连接器)优先在该路径查找,若未找到,在标准库路径/lib /lib64 /usr/lib /usr/lib64 查找

gcc:

-shared 编译动态链接库文件
-static 编译选项加入-static表示寻找libtest.a(-ltest)

-g 可供调试用的可执行文件,可在gdb中运行,包含调试信息,运行效率低,文件变大,可用strip将debug信息删除,strip也会将正常编译的一些额外信息删除(如函数名),大小比正常编译生成的可执行文件还要小,strip a.out

-Wall 打开所有警告信息

-s gcc -s source_file.c --strip-all

-O 优化程序,优化后可能变小,速度提高 such as -O2 级别越高,越优化 -O3 可能会有bug

-I 头文件目录,优先级高于默认路径 -I /path 则寻找路径 /path --> /usr/include --> /usr/local/include -->/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include

-include 少用,一般在源码中指明

-L/path/libdir -l库名 在/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64中的库可以只用 -l参数


/usr/bin/cc -> gcc cc为gcc连接
/usr/bin/c++ /usr/bin/g++

gtk-config --libs --cflags 编译gtk程序 gcc gtktest.c `gtk-config --libs --cflags` 用于特定包

pkg-config 通用 pkg-config --list-all 查看所有支持包
pkg-config gtk+ --libs --cflags
gcc gtktest.c `pkg-config --libs --cflags`


编译时,指明库的绝对路径,一定有效. -lxxx -lxxx 单独指明库名,若不在默认路径,则需配合 -L指明路径
***********编译时,指明的是库的绝对路径,则链接成的可执行程序只会去编译时指定的绝对路径找库文件

自己编译的动态链接库,必须使用-lskew方式明确指定链接的库名

编译为动态链接库 gcc skew.c -shared -fPIC -o libskew.so 不使用-o选项 默认生产a.out

 

./a.out: error while loading shared libraries: libskew.so: cannot open shared object file: No such file or directory
此为执行阶段报错
solution:
①:向/etc/ld.so.conf添加libskew.so所在路径,ldconfig ,ldconfig -p|grep skew
②:新建/etc/ld.so.conf.d/skew.conf,并添加libskew.so所在路径, ldconfig ,ldconfig -p|grep skew
③:把libskew.so复制,或链接到/lib /lib64 /usr/lib /usr/lib64 下 ldconfig ********** 必须执行ldconfig,否则可能加载不到
/usr/local/lib /usr/local/lib64 并不在ldconfig默认路径内,可以ldconfig /usr/local/lib临时指出
⑤:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt 必须export,可能于子shell中执行

 

以上是关于gcc编译选项的主要内容,如果未能解决你的问题,请参考以下文章

GCC 编译选项

gcc编译选项pedantic(GCC编译器的C++标准严格模式)

arm gcc 内嵌汇编,gcc该是啥选项呢

gcc 常用编译选项

Gcc常用选项及编译过程

GCC | GCC编译器