文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
首先,创建目标文件
在把 hfcal.c 代码转换为动态库之前需要把它先编译为.o 目标文件,像这样:
发现区别了吗?这次在创建 hfcal.o 时多加了一个标志:
-fPIC 。它告诉 gcc 你想创建位置无关代码。有的操作系统和处理器要用位置无关代码创建库,这样它们才能在运行时决定把代码加载到存储器的哪个位置。
事实上在大多数操作系统中都不需要加这个选择。试试吧,不加也没有关系。
百宝箱
什么是位置无关代码?位置无关代码就是无论计算机把它加载到存储器的哪个位置都可以运行的代码。想象你有一个动态库,它要使用加载点 500 个字节以外的某个全局变量的值,那么如果操作系统把库加载到其他地方就会出错。只要让编译器创建位置无关的代码,就可以避免这种问题。包括 Windows 在内的一些操作系统在加载动态库时会使用一种叫存储器映射的技术,也就是说所有代码其实都是位置无关的。若你在 Windows 上用刚刚那条命令编译代码,gcc 可能会给出一条警告,告诉你不需要-fPIC 选项。你既可以奉命删除它,也可以当作没看见。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论