Linux asm проблема: вызов функции extern - PullRequest
3 голосов
/ 20 января 2011

На 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», я получаю следующую ошибку: (прежде, чем добавить вызов my_jump внутри кода asm, все было в порядке)

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

есть идеи?

1 Ответ

1 голос
/ 08 января 2012

Удаление FUNC_NO_RETURN из file2.h

например, 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 ++ - версия
g ++ (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1)

Версия Linux: 3.1.5-6.fc16.x86_64

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...