Linux的ASM问题:调用外部函数

在Linux上

file1.s:

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

file2.h:

extern "C" FUNC_NO_RETURN void my_jump();

file3.cpp:

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

我的链接模块时,其所说的“MYFUNC”,我得到以下错误:(previosly添加调用汇编代码里面my_jump之前,一切都OK)

"relocation R_X86_64_PC32 against 'longjmp_hack' can not be used when making a shared object; recompile with -fPIC"

有任何想法吗?

--------------解决方案-------------

除去file2.h的FUNC_NO_RETURN

例如file2.h:

为extern“C”无效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(红帽4.6.2-1)

Linux的版本:3.1.5-6.fc16.x86_64

分类:Linux的 时间:2015-03-15 人气:1
本文关键词: Linux中,组装
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.253 (s). 10 q(s)