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

    请问这是为什么?

  • 相关阅读:
    maven学习(中)- 私服nexus搭建
    批量kill相关所有进程
    install kinect driver for ARM---38
    install usb serial
    用真实的机器人做人脸跟踪器---37
    PCL Nodelets 和 3D 点云---36
    在程序中访问骨架图---35
    openni和骨架追踪 rviz查看---34
    颜色追踪块CamShift---33
    动态的添加和丢弃关键点---32
  • 原文地址:https://www.cnblogs.com/bouygues/p/4903805.html
Copyright © 2011-2022 走看看