在global.c文件中定义了一些全局变量,如下所示:
int globalvar;
我有一个头文件global.h将这个变量声明为extern
extern int globalVar;
现在我有了main.c,它与已编译的global.o (从global.c编译)链接,它具有打开(使用dlopen)的代码,共享对象sh.so是从sh.c构建的,通过global.h访问globalVar。尽管我的可执行文件定义了globalVar (静态链接),但是当我加载动态链接库sh.so时,它表示未定义的globalVar。怎么处理这个?
我的问题
我正在尝试编写一个共享库(不是一个可执行文件,所以请不要告诉我使用-no-pie)与程序集和C一起使用单独的文件(不是内联程序集)。
我希望通过汇编代码中的全局偏移表访问C全局变量,因为调用的函数可以在任何其他共享库中定义。
我知道PLT/GOT文件,但我不知道如何告诉编译器正确地为链接器生成重新定位信息(语法是什么),以及如何告诉链接器使用该信息重新定位我的代码(链接器选项是什么)。
我的代码使用链接错误进行编译。
/bin/ld: tracer.o: relocation R_X86_64_PC32 against
/bin/ld: final link failed: bad