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

    请问这是为什么?

  • 相关阅读:
    docker安装&镜像加速
    CentOS安装python3
    Elasticsearch相关下载地址
    fiddler抓包手机和小程序
    locust简单入门演示(一)——任务等待机制
    win10下载openssl
    XGBoost参数调优完全指南(转)
    HIVE学习
    windows定期清理指定目录文件(保留指定天数日志)
    RedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件
  • 原文地址:https://www.cnblogs.com/bouygues/p/4903805.html
Copyright © 2011-2022 走看看