gpt4 book ai didi

c - 如果同一个共享库工作正常,为什么静态库会导致对齐问题?

转载 作者:行者123 更新时间:2023-11-30 15:58:08 26 4
gpt4 key购买 nike

我有一个非常奇怪的问题。我从一个软件源构建两个库:静态(使用 ar)和动态(使用 gcc)。将我的测试应用程序与动态库链接后,它可以正常工作。但是与静态库链接的测试应用程序存在“段错误”或“未处理的错误:对齐异常...非法指令”。

为什么?我知道我的软件代码中有一个错误,但是如果使用静态库,内存对齐有什么不同吗?

最佳答案

如果您查看静态链接与动态链接的定义,就会清楚地看到,所讨论的两个二进制文件的内存布局非常不同。

通过静态链接,满足链接器符号表中创建的依赖关系所需的所有对象代码都包含在生成的二进制文件中。

通过动态链接,这些依赖项会被重写为占位符,加载程序在加载二进制文件时会尝试满足这些占位符。实际的目标代码根据动态库存在的对齐要求加载到内存中的某个位置。

因此,最大的区别在于二进制文件中包含哪些目标代码。静态库中的某些内容会导致执行脱轨。我建议对您的库代码进行一些选择性单元测试以及一些代码检查,以尝试查明问题。

关于c - 如果同一个共享库工作正常,为什么静态库会导致对齐问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10011096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com