gcc高级编译链接参数用过gcc的人很多,但称得上精通的人可能真不多,下面的gcc高级参数,你又知道多少呢? 1.部分动态链接部分静态链接 一说到gcc静态链接,感觉大家都知道的吗,-static,但如果要说是,部分库静态链接,部分库又要动态链接,大家感觉就晕了。 为什么有这种需求呢?因为有些库,如oracle客户端库,是不能完全静态链接的,但为了方便,又希望把部分库做静态链接,如libev,结果是需要静态链接libev,然后动态链接oracle客户端库。 gcc提供了面对这种极端情况的方法:-Wl,option,注意中间不能有空格 用于灵活的配置动态链接和静态链接 下面的例子,静态链接libev,然后动态链接oracle math等库 -Wl,-static -lev -Wl,-call_shared -lnsl -lclntsh -lnnz11 -lm 注意,这个参数是Linker Options,链接时生效 2.设置动态链接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 |
|