函数调用C到C++错误
我想将c程序转换为C++。该程序会生成一组“* .so”文件,这些文件在llvm生成的另一个程序中使用。基本上,llvm生成的代码具有对当前代码的回调。我使用LDPRELOAD加载这些文件函数调用C到C++错误
作为第一步,我只是用C++编译代码。汇编工作正常。但是当它运行它segfaults。有一个标签dec_blk
,它应该包含功能dec_blk()
的地址。我已经使用extern "C"
作为该功能及其原型以防止解体。当它与C版上运行,该标签具有正确的地址,但是,当我用C++版本运行该标签的值是0,我提供以下
LLVM代码的细节
subq $24, %rsp
movq dec_blk, %rax
movq dec_blk+8, %rcx
movq %rdi, 16(%rsp)
movq %rcx, %rdi
movq 16(%rsp), %rcx
movq %rsi, 8(%rsp)
movq %rcx, %rsi
movq 8(%rsp), %rdx
callq *%rax # segfaults here
函数声明
extern "C"
{
long int dec_blk(void*, long int*, long int*);
}
请您在寻找什么帮助。我正在使用gdb进行调试
有一个标签dec_blk,它应该包含一个函数dec_blk()的地址。 ......但是,该标签的,当我与C运行它++版本的值是0
你的描述这段代码(你没有显示)匹配:
extern "C" long int dec_blk(...);
int main() {
return dec_blk();
}
但在拆卸你的问题这个(不同)代码相匹配,而不是:
extern "C" long int (*dec_blk)(...);
int main() {
return dec_blk();
}
这两个片段是并不相同。我猜你在使用第一个函数时已经使用了第二个函数。
感谢您的回复,我检查了....这不是这种情况 – simpleuser 2013-03-04 17:10:18
@simpleuser“情况并非如此”您检查了* how *?除非您提供,否则您不太可能得到满意的答案额外的细节(我*仍*认为我的假设很可能是正确的;至少这是编译代码的样子)。 – 2013-03-05 15:18:33
对不起,我的错别字 – simpleuser 2013-02-21 17:26:14
所以你的问题解决了? – 2013-02-22 13:03:52
@phresnel Nooooooooooooooooo :( – simpleuser 2013-02-24 09:53:08