- 浏览: 381046 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (229)
- java编程 (4)
- java实用程序 (2)
- 算法设计 (34)
- 数据库 (8)
- ACM模板 (12)
- 技术术语 (1)
- java_web (3)
- php (22)
- eclipse (3)
- linux (25)
- linux命令使用心得 (3)
- web服务器 (8)
- IT知识 (2)
- 前端技术 (17)
- 开源软件 (5)
- vim (3)
- linux多线程 (9)
- web开发经验 (3)
- lua (5)
- linux编程 (3)
- smarty (1)
- mysql (4)
- Hive (2)
- 数据挖掘 (9)
- python (2)
- 生活 (1)
- C++ (2)
- 计算机 (1)
- objective-c (11)
- css (2)
- 游戏 (1)
- Mac (1)
最新评论
-
lr544463316:
我的怎么不行呀.....
Mysql Access denied for user ''@'localhost' to database 的一种解决方法 -
babaoqi:
使用时需要注意group_concat函数返回值的最大长度=g ...
mysql中的group_concat函数 -
代码能力弱成渣:
可以帮我看下我的代码么?我自己写的sam,也有ac过题的,但是 ...
求两个字符串的最长公共连续子序列(SAM实现) -
atgoingguoat:
有1000个?不过还是收藏下。
jquery常用的插件1000收集(转载)
转载自:http://my.oschina.net/alphajay/blog/4953?from=rss
Include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。
当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib()
写在specs内的
后来用-D -I -L指定的
gcc环境变量设定(编译的时候)
ld.so的环境变量(这是run time的时候)
一、头文件
gcc 在编译时如何去寻找所需要的头文件 :
※所以header file的搜寻会从-I开始
※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
※再找内定目录
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g -3
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是
/usr/include
prefix/include
prefix/xxx-xxx-xxx-gnulibc/include
prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
二、库文件
cos()等函式库的选项要多加 -lm
编译的时候:
※gcc会去找-L
※再找gcc的环境变量LIBRARY_PATH
※再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的
三、运行时动态库的搜索路径
1、在配置文件/etc/ld.so.conf中指定动态库搜索路径
2、通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)
3、在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。
这是通过gcc 的参数"-Wl,-rpath,"指定(如例3所示)。当指定多个动态库搜索路径时,路径之间用冒号":"分隔)
4、默认的动态库搜索路径/lib
5、默认的动态库搜索路径/usr/lib
可以通过执行可执行文件pos得到的结果不同获知其搜索到了哪个动态库,从而获得第1个动态库搜索顺序,然后删除该动态库,再执行程序pos,获得第2个动态库搜索路径,再删除第2个被搜索到的动态库,如此往复,将可得到Linux搜索动态库的先后顺序。
程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示
程序pos输出结果 使用的动态库 对应的动态库搜索路径指定方式
./ ./libpos.so 编译目标代码时指定的动态库搜索路径
/root/test/env/lib /root/test/env/lib/libpos.so 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
/root/test/conf/lib /root/test/conf/lib/libpos.so 配置文件/etc/ld.so.conf中指定的动态库搜索路径
/lib /lib/libpos.so 默认的动态库搜索路径/lib
/usr/lib /usr/lib/libpos.so 默认的动态库搜索路径/usr/lib
综合以上结果可知,动态库的搜索路径搜索的先后顺序是:
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib;
5.默认的动态库搜索路径/usr/lib。
____________________________
常用的环境变量名
在交叉编译的时候我们需要用到其他的库,在config时候可以通过“-I”来指定头文件目录,但是每次都需要设置的话难免有些麻烦,找到一个简单的方法。看下文的红色部分。
有 大量的环境变量可供设置以影响 GCC 编译程序的方式。利用这些变量的控制也可使用合适的命令行选项。一些环境变量设置在目录名列表中。这些名字和 PATH 环境变量使用的格式相同。特殊字符 PATH_SEPARATOR (安装编译程序的时候定义)用在目录名之间。在 UNIX 系统中,分隔符是冒号,而 Windows 系统中为分号。
C_INCLUDE_PATH
编译 C 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -isystem 选项一样。会首先查找 -isystem 指定的所有目录。
也见 CPATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。
COMPILER_PATH
该环境变量指定一个或多个目录名列表,如果没有指定 GCC_EXEC_PREFIX 定位子程序,编译程序会在此查找它的子程序。
也见 LIBRARY_PATH 、 GCC_EXEC_PREFIX 和 -B 命令行选项。
CPATH 编译 C 、 C++ 和 Objective-C 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -l 选项一样。会首先查找 -l 指定的所有目录。
也见 C_INCLUDE_PATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。
CPLUS_INCLUDE_PATH 编译 C++ 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -isystem 选项一样。会首先查找 -isystem 指定的所有目录。
也见 CPATH 、 C_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。
DEPENDENCIES_OUTPUT 为文件名设置该环境变量会让预处理程序将基于依赖关系的 makefile 规则写入文件。不会包括系统头文件名字。
如果环境变量设置为单名,被看作是文件名字,而依赖关系规则的名字来自源文件名字。如果定义中有两个名字,则第二个名字是用作依赖关系规则的目标名。
设置该环境变量的结果和使用命令行选项 -MM 、 -MF 和 -MT 的组合是一样的。也见 SUNPRO_DEPENDENCIES 。
GCC_EXEC_PREFIX 如果定义了该环境变量,它会作为编译程序执行的所有子程序名字的前缀。例如,如果将变量设置为 testver 而不是查找 as ,汇编器首先会在名字testveras 下查找。如果在此没有找到,编译程序会继续根据它的普通名进行查找。可在前缀名中使用斜线指出路径名。
GCC_EXEC_PREFIX 的默认设置为 prefix /lib/gcc-lib/ ,这里的 prefix 是安装编译程序时 configure 脚本指定的名字。该前缀也用于定位标准连接程序文件,包含进来作为可执行程序的一部分。
如果使用 -B 命令行选项,会重写该设置。也见 COMPILER_PATH 。
LANG 该环境变量用于指出编译程序使用的字符集,可创建宽字符文字、串文字和注释。
定义 LANG 为 C-JIS ,指出预处理程序将多字节字符按照 JIS (日语工业标准)字符进行解释。 C-SJIS 可用来指出 Shift -JIS 字符而 C-EUCJP 指出日文 EUC 。
如果没有定义 LANG ,或定义为不可识别,函数 mblen() 被用来确定字符宽度,而 mbtowc() 用来将多字节序列转换为宽字符。
LC_ALL 如果设置,该环境变量的值重写 LC_MESSAGES 和 LC_CTYPE 的所有设置。
LC_CTYPE 该环境变量指出引用串中定义的多字节字符的字符分类。主要用于确定字符串的字符边界,字符编码需要用引号或转义符,可被错误地解释为字符串的结尾或特殊字 符串。对 Australian English ,可将它设置为 en_AU ; 对 Mexican Spanish ,可将它设置为 es_MX。如果没有设置该变量,默认为 LANG 变量的值,或如果没有设置 LANG ,那就使用 C 英语行为。也见 LC_ALL 。
LC_MESSAGES 该环境变量指出编译程序使用何种语言发出诊断消息。对 Australian English ,可设置为 en_AU ;对 MexicanSpanish ,可设置为 es_MX 。如果变量没有设置,使用 LANG 变量的默认值,或如果没有设置 LANG ,那就使用 C英语行为。也见 LC_ALL 。
LD_LIBRARY_PATH 该环境变量不会影响编译程序,但程序运行的时候会有影响。变量指定一个目录列表,程序会查找该列表定位共享库。只有当未在编译程序的目录中找到共享库的时候,执行程序必须设置该变量。
LD_RUN_PATH 该环境变量不会影响编译程序,但程序运行的时候会有影响。该变量在运行时指出文件的名字,运行的程序可由此得到它的符号名字和地址。地址不会重新载入,因而可能符号引用其他文件中的绝对地址。这和 ld 工具使用 -R 选项完全一样。
LIBRARY_PATH 该环境变量可设置为一个或多个目录名字列表,连接程序会搜寻该目录,以查找特殊连接程序文件,和由 -l (字母 l )命令行选项指定名字的库。
由 -L 命令行选项指定的目录在环境变量的前面,首先被查找。也见 COMPILER_PATH 。
OBJC_INCLUDE_PATH 在编译 Objective-C 程序的时候使用该环境变量。一个或多个目录名的列表由环境变量指定,用来查找头文件,就好像在命令行中指定 -isystem 选项一样。所有由 -isystem 选项指定的目录会首先被查找。
也见 CPATH 、 CPLUS_INCLUDE_PATH 和 C_INCLUDE_PATH 。
SUNPRO_OUTPUT 为文件名设置该环境变量会令预处理程序将基于依赖关系的 makefile 规则写入文件。会包含系统头文件名。
如果环境变量被设置为单个名字,它将会被当作文件名,依赖关系规则中的名字将由源文件的名字中获得。如果定义中有两个名字,第二个名字就是依赖关系规则中的目标名。
设置该环境变量的结果与在命令行中使用参数 -M 、 -MF 和 -MT 的效果一样。参见 DEPENDENCIES_OUTPUT 。
TMPDIR 这个变量包含了供编译程序存放临时工作文件的目录的路径名。这些文件通常在编译过程结束时被删除。这种文件的一个例子就是由预处理程序输出并输入给编译程序的文件。
发表评论
-
Shell 显示带颜色字体
2014-10-24 14:45 810转自:http://www.linuxidc.c ... -
awk命令使用
2014-05-08 20:37 546输出把一个文件中最长的行的长度(test.log是文件名): ... -
ubuntu快捷键设置大全
2013-01-26 16:47 1472转自:http://xiongyongyuan1234.bl ... -
linux重要文件或目录
2012-12-28 11:06 724#/proc/sys/fs/file-max 一个整数,表示 ... -
/proc/pid目录下文件的含义
2012-12-27 18:56 2970attr: 进程的属性 cmdline: 启动进程 ... -
根据pid判断某个进程是否存在
2012-12-18 16:36 3148#命令“ps -af”的第一列就是进程id #${pid}是 ... -
/var/lock/subsys作用
2012-12-18 16:33 5346转自: http://sunxiaqw.blog.163.co ... -
设置了O_APPEND,lseek的操作将无效
2012-10-04 19:30 2638下面 的代码说明,设置了O_APPEND,语句“lseek(f ... -
shell实现在头文件搜索目录中搜索指定的头文件
2012-10-04 14:22 868#!/bin/bash # 搜索头文件的路径 if [ $ ... -
shell实现查找某目录下所有的文本文件
2012-09-24 13:11 1015第一个参数是要查找的目录 #!/bin/bash ... -
MakeFile预定义变量
2012-09-23 12:16 1313转自:http://hi.baidu.com/ueszx ... -
/usr/bin/ld: cannot find -l* 错误的解决方法……
2012-09-02 14:25 1586转自: http://navyaijm.blog.51cto. ... -
pthread_kill的用法
2012-08-26 23:37 9621#include <pthread.h> #in ... -
sed使用命令
2012-08-26 22:41 644删除一个文件中的空行,假设文件明是test.cpp,保证当前目 ... -
no debugging symbol的原因
2012-08-26 00:21 600执行 gdb youpropgram的时候出现“no debu ... -
VMware Workstation 安装ubuntu
2012-08-17 21:10 873转自: http://wenku.baidu.com/view ... -
linux解决“No manual entry for”问题的方法
2012-08-16 12:36 4059转载自: http://www.centos.bz/2011/ ... -
长度为0的数组
2012-08-15 19:35 800转载自:http://www.cnblogs. ... -
linux安装memcached
2012-08-15 12:35 958所需软件: libevent-2.0.19-stable.t ... -
安装lilnux各分区大小推荐
2012-07-02 16:24 845ubuntu: /usr —— 12G /var — ...
相关推荐
详细介绍了linux下gcc编译器使用时设计到的头文件和库文件链接问题
Linux下gcc编译中关于头文件与库文件搜索路径相关问题.pdf
linux下头文件包含及库的链接路径问题解决办法。C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。自己指定的路径就不说了,这里说明一下系统自动...
linux驱动头文件位置及作用,用于编写Linux驱动程序的参考书,Linux驱动程序员必备
生成Linux静态库的工程模板,只要在Makefile 文件中添加工程中源文件头文件的路径,就可以生成Linux静态库。这里是demo工程。
,方式可参照proxyServer mediaServer自行添加,在mylive555解决方案上 右键添加新的控制台空项目,然后添加相应头文件,源文件,然后设置库的路径即可。 在其他电脑没试过,如果出现连接错误 头文件找不到,则重新...
在Linux系统中,Makefile是一种文本文件,用于定义和管理软件项目的编译和构建过程。Makefile使用make命令来根据定义的规则和依赖关系自动化地进行编译和构建。 Makefile通常包含以下内容: 1. 变量(Variables):...
动态库*.so在linux下用c和c++编程时经常需要使用。 1、动态库的编译 下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件...
windows 下C源代码include 文件的路径使用 \在linux 下不能编译需要改成 / 比如#include "driver\uart.h",会自动换成 #include "driver/uart.h" 把程序放在代码根目录下点替换,自动替换include行的斜杠方向,其他...
PS:动态库和静态库文件同名的建议不要放在一起,不然 ld的时候有可能找错文件 2、动态库的用法 gcc -o test test_md5_hash.c -g -L. -lminmd5 -I. 编译完后,建议将so 文件copy 到/usr/lib 然后执行 ldconfig ...
使用Makefile模板,用户只需要根据需要配置头文件路径,库文件路径,编译器、目标文件名即可一键make,生成对应编译器平台的可执行程序
所以因该将它放入系统头文件中(Linux下是 /usr/include),这样gcc编译器就可以找到它了。 1. 超级用户权限登入 #cd /usr/include 2. 将apue.h和error.c两个文件copy到该目录下。(apue.h位于 your_apue_path/...
在C++中,所有的文件操作,都是以流(stream)的方式进行的,fstream也就是文件流file stream。这篇文章主要介绍了C++中#include头文件,需要的朋友可以参考下
<glob.h> 路径名模式匹配类型 <grp.h> 组文件 <netdb.h> 网络数据库操作 <pwd.h> 口令文件 <regex.h> 正则表达式 <tar.h> TAR归档值 <termios.h> 终端I/O <unistd.h> 符号常量 <utime.h> 文件时间 ......
Cmake交叉编译环境配置文档 1、设置交叉编译之前,必须在CMake...2、在通知CMake要交叉编译以后,还要告诉CMake到哪个路径下去找库文件,因为在交叉编译的时候CMake是不会自动去系统默认的目录找库文件和头文件的:...
007 qtcreator引入第三方opencv库和头文件路径 008 qtcreator项目配置添加界面并设置构建和运行 009 vs2015创建QT项目并详细介绍vs项目设置 010 VS设置编译的qt库版本和导出为qtcreator项目 011 qt项目由源码和...
2.1.2 Linux操作系统 .......................................................................................................8 2.1.3 目标板最后运行的环境..................................................
基于v4l2驱动的摄像头采集编码,然后用mpeg4方式编码并保存成可播放的avi文件。虽然没有加标注,不过程序比较小,...读者需要安装的库及头文件在makefile里有定义,只需要安装ffmpeg即可,需要自己修改一下库的路径。