zoukankan      html  css  js  c++  java
  • 编译参数

    -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

    请问这是为什么?

  • 相关阅读:
    自定义异常
    this()和super()的区别
    Eclipse快速创建函数
    Eclipse的.java文件有蓝色三角符号
    可变数量参数
    近期的目标
    怎么在电脑右键的新建里面添加.md文件
    数组的排序(从小到大)
    Arrays类
    不用乘法计算乘法(快速计算)
  • 原文地址:https://www.cnblogs.com/bouygues/p/4903805.html
Copyright © 2011-2022 走看看