分享

GCC

 sky_feiyang 2015-05-01
生成静态库:ar  cr  libNAME.a  x1.o  x2.o ...
查看静态库中的文件:ar  t  libNAME.a 

gcc 相同文件类型时,不考虑顺序。不同文件类型时,要将调用者放在前面,定义者放在后面。
尽量将调用者放在前面,定义者放在后面


gcc -Wall xxx.c -lNAME -o xxx等价于 gcc -Wall xxx.c libNAME.a -o xxx
gcc -Wall xxx.c -L库文件路径 -lNAME -o xxx//-L指定库文件路径 如同-I指定头文件路径一样,这时不可以libNAME.a,若想用.a则可以直接连接库文件路径/libNAME.a,就像连接一般的.o文件一样,因为.a就是打包了一堆.o文件

若不想用-I和-L指定路径则可以定义环境变量,库文件为:LIBRARY_PATH
头文件在C中为C_INCLUDE_PATH,C++中为CPLUS_INCLUDE_PATH
具体过程:
env|grep LIBRARY_PATH//查看是否有该变量
export LIBRARY_PATH=路径:$LIBRARY_PATH
env|grep LIBRARY_PATH//查看是否添加成功

LIBRARY_PATH是编译时的库查找路径
LD_LIBRARY_PATH是运行时的动态库查找路径

若连接的是动态库则运行前需要设置LD_LIBRARY_PATH或者其他两种方法见
http://www.360doc.com/showweb/0/0/470249707.aspx

对于C/C++编译连接来说他们的默认路径是:
/lib  /usr/lib  /usr/local/lib

但是系统执行share library的默认路径却是:
/lib  /usr/lib
没有:/usr/local/lib

所以,只能编译连接,不能执行.

解决方法:
设置 LD_LIBRARY_PATH 路径包括 /usr/local/lib

export LD_LIBRARY_PATH =newdir:$LD_LIBRARY_PATH 

接下来的问题是:以上做法,只是临时设置变量 LD_LIBRARY_PATH ,下次开机,一切设置将不复存在;如何把这个值持续写到 LD_LIBRARY_PATH 里呢?
 
我们可以在 ~/.bashrc 或者 ~/.bash_profile 中加入 export 语句,前者在每次登陆和每次打开 shell 都读取一次,后者只在登陆时读取一次。我的习惯是加到 ~/.bashrc 中,在该文件的未尾,可采用如下语句来使设置生效:
 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
修改完后,记得关掉当前终端并重新打开一个新的终端,从而使上面的配置生效。

默认情况下gcc的头文件查找目录为:/usr/local/include /usr/include
默认情况下gcc的库文件查找目录为:/usr/local/lib /usr/lib

定义宏 gcc -Wall -DNAME=VALUE xxx.c -o xxx
若为-DNAME则宏NAME默认为1

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多