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

    请问这是为什么?

  • 相关阅读:
    南京航空航天大学软件著作权申请办法
    CoDel Test Script
    [编辑中] 免费的Internet流量发生器 | Free Internet Traffic Generators
    关于Java LDAP登录集成
    sonar + ieda实现提交代码前代码校验
    sonar+Jenkins代码覆盖率检测
    定义自己的代码风格CheckStyle简单使用
    HAProxy简单使用
    读取大文件性能测试
    使用HtmlUnit登录百度
  • 原文地址:https://www.cnblogs.com/bouygues/p/4903805.html
Copyright © 2011-2022 走看看