首页 > 其他 > 详细

编译参数

时间:2015-10-23 11:42:22      阅读:254      评论:0      收藏:0      [点我收藏+]

-fPIC
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),
则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意
位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

PIC使.so文件的代码段变为真正意义上的共享
如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置.
不加fPIC编译出来的so,是要再加载时根据加载到的位置再次重定位的.(因为它里面的代码并不是位置无关代码)
因此,不用fPIC编译so并不总是不好.

如果你满足以下4个需求/条件:
1.该库可能需要经常更新
2.该库需要非常高的效率(尤其是有很多全局量的使用时)
3.该库并不很大.
4.该库基本不需要被多个应用程序共享
+++++++++++++++++++++++++++++++++

-Wall
-Wall 打印出gcc提供的警告信息

-v 列出所有编译步骤

+++++++++++++++++++++++++++++++++

另外,一个小问题:

g++ -Wall -I. -L. -lsubclass -o main caller.cpp

提示我 undefined function

然后我各种纠结,最后更改了一下源码的顺序就好了:

g++ caller.cpp -Wall -I. -L. -lsubclass -o main

请问这是为什么?

编译参数

原文:http://www.cnblogs.com/bouygues/p/4903805.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!