返回介绍

首先,创建目标文件

发布于 2024-10-10 23:21:31 字数 843 浏览 0 评论 0 收藏 0

在把 hfcal.c 代码转换为动态库之前需要把它先编译为.o 目标文件,像这样:

发现区别了吗?这次在创建 hfcal.o 时多加了一个标志:

-fPIC 。它告诉 gcc 你想创建位置无关代码。有的操作系统和处理器要用位置无关代码创建库,这样它们才能在运行时决定把代码加载到存储器的哪个位置。

事实上在大多数操作系统中都不需要加这个选择。试试吧,不加也没有关系。

百宝箱

什么是位置无关代码?位置无关代码就是无论计算机把它加载到存储器的哪个位置都可以运行的代码。想象你有一个动态库,它要使用加载点 500 个字节以外的某个全局变量的值,那么如果操作系统把库加载到其他地方就会出错。只要让编译器创建位置无关的代码,就可以避免这种问题。包括 Windows 在内的一些操作系统在加载动态库时会使用一种叫存储器映射的技术,也就是说所有代码其实都是位置无关的。若你在 Windows 上用刚刚那条命令编译代码,gcc 可能会给出一条警告,告诉你不需要-fPIC 选项。你既可以奉命删除它,也可以当作没看见。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文