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

标签 c debugging memory-management gcc embedded

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

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

最佳答案

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

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

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

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

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

相关文章:

.net - 要求用户像 VS 调试器一样使用管理权限重新启动应用程序

java - 对于偏移量/计数,每个字符串实例 "waste"8 个字节是否有意义?

c - 我需要用 C 解析一些月份名称

c - 我是 C 新手,正在测试代码,并且在使用函数时遇到困难

c - 为什么我无法在 C 中使用 %7.d 或其他 %x.d 打印 0

cocoa 串问题

python效率和内存中的大对象

c - LD_PRELOAD什么时候会被忽略

asp.net - 使用 apache 和 mod_mono 调用堆栈缺少关于单声道的信息

C++ 从命令行附加 Visual Studio 调试器