转自:http://blog.zheezes.com/senior-gcc-comp ... eters.html
一.前言
用过gcc的人很多,但称得上精通的人可能真不多,下面的gcc高级参数,你又知道多少呢?
二.部分动态链接部分静态链接
说到gcc静态链接,感觉大家都知道的吗,-static,但如果要说是,部分库静态链接,部分库又要动态链接,大家感觉就晕了。
为什么有这种需求呢?因为有些库,如oracle客户端库,是不能完全静态链接的,但为了方便,又希望把部分库做静态链接,如libev,结果是需要静态链接libev,然后动态链接oracle客户端库。
gcc提供了面对这种极端情况的方法:-Wl,option,注意中间不能有空格
用于灵活的配置动态链接和静态链接
下面的例子,静态链接libev,然后动态链接oracle math等库
-Wl,-static -lev -Wl,-call_shared -lnsl -lclntsh -lnnz11 -lm
注意,这个参数是Linker Options,链接时生效
三.设置动态链接PATH
一般来说,大量服务器部署的时候,服务器的PATH等应该是一样的,但如果某些服务器没有完全标准化配置,比如oracle的安装路径修改了,部分服务器,程序放上去找不到oracle客户端的lib,你是不是要抓狂了呢?
面对这种问题,一般都是增加一个初始化的脚本设置PATH或者修改profile文件,无形中又引入了新的需求。
gcc提供了一个参数:-Wl,-rpath,注意中间不能有空格
用于在链接程序的时候增加PATH的搜索路径,这样就避免了需要脚本来初始化PATH的麻烦,遇到新的环境,增加rpath就好了,方便统一的部署。
下面的例子,设置了两个oracle lib动态链接的路径:
-Wl,-rpath=/home/oracle/db_1/lib -Wl,-rpath=/home/app/oracle
也可以简写,注意是”:”,和PATH的路径分隔符一样,还要注意中英文字符:
-Wl,-rpath=/home/oracle/db_1/lib:/home/app/oracle
[编译]GCC - 部分动态链接部分静态链接
在线用户
正浏览此版面之用户: 没有注册用户 和 2 访客