0

I have a very strange problem. I build two libraries from one software source: static (using ar) and dynamic (using gcc). After I link my test application with the dynamic library it works ok. But a test application linked with the static library exists with either "segmentation fault" or with "Unhandled fault: alignment exception ... illegal instruction".

Why? I know that there is a bug in my software code, but is there any difference in the memory alignment if a static library used?

4

1 回答 1

1

如果您查看静态链接与动态链接的定义,应该清楚这两个二进制文件的内存布局非常不同。

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

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

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

于 2012-04-04T13:05:21.073 回答