我有一个在没有 C++11 标志 (-std=c++11) 的情况下编译的库和一个链接到使用 -std=c++11 构建的库的应用程序。它调用库中的一个函数,然后程序在库中崩溃得更深。我发现发生崩溃的函数(它只是一个返回类中的指针的简单函数)的反汇编在调用堆栈源自该程序时与库的测试程序不同,后者也是'不是用 C++11 标志构建的。
操作系统是 OS X Mountain Lion,编译器是 Clang++。
为什么 C++11 应用程序和非 C++11 库之间没有能力,以及当不同的生成代码在库中时何时生成反汇编,因此应该是相同的?
两种不同的反汇编:
TestApplication`Core::GetPointer() const at System.h:xxx:
0x100009690: pushq %rbp
0x100009691: movq %rsp, %rbp
0x100009694: movq %rdi, -8(%rbp)
0x100009698: movq -8(%rbp), %rdi
0x10000969c: movq 64(%rdi), %rax ;<-------Difference
0x1000096a0: popq %rbp
0x1000096a1: ret
Lib1Prototype`Core::GetPointer() const at System.h:xxx:
0x100019c10: pushq %rbp
0x100019c11: movq %rsp, %rbp
0x100019c14: movq %rdi, -8(%rbp)
0x100019c18: movq -8(%rbp), %rdi
0x100019c1c: movq 40(%rdi), %rax ;<------Difference
0x100019c20: popq %rbp
0x100019c21: ret