gpt4 book ai didi

linux asm 问题 : calling extern function

转载 作者:太空狗 更新时间:2023-10-29 11:20:32 25 4
gpt4 key购买 nike

在 Linux 上

文件1.s:

.text
.globl MyFunc
Func:
....
call my_jump
ret

文件2.h:

extern "C" FUNC_NO_RETURN  void  my_jump();

文件3.cpp:

extern "C" __attribute__((noinline)) void my_jump()
{
return;
}

当链接调用“MyFunc”的模块时,出现以下错误:(之前在 asm 代码中添加对 my_jump 的调用之前,一切正常)

“创建共享对象时不能使用针对‘longjmp_hack’的重定位 R_X86_64_PC32;使用 -fPIC 重新编译”

有什么想法吗?

最佳答案

从 file2.h 中删除 FUNC_NO_RETURN

例如file2.h:

extern "C" void my_jump();

file4.c:

#include "file2.h"  
extern "C" void MyFunc();
main(){
MyFunc();
}

并修复 file1.s 中的拼写错误:

.text  
.globl MyFunc
MyFunc:
call my_jump
ret

这一切对我来说都很好....

g++ file1.s file3.cpp file4.c -o a.out

编译器版本;

$ g++ --version
g++ (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1)

Linux版本:3.1.5-6.fc16.x86_64

关于linux asm 问题 : calling extern function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745882/

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