我正在尝试在 Matlab 中对 C 代码进行 mexify,该代码与我使用 nasm 组装的对象链接。当我尝试对代码进行 mexify 时,我收到来自 Matlab 的错误。这是我用来混淆代码的命令:
mex main.c hello.o
这是C代码:
#include <stdio.h>
#include <stdlib.h>
#include "mex.h"
extern char * helloWorld();
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
char * sentence = helloWorld();
printf("%s\n", sentence);
}
这是汇编代码:
global helloWorld
section .data
greeting: db "Hello, World", 0
section .text
helloWorld:
mov eax, greeting
ret
我用来组装代码的命令是:
nasm -felf64 -gdwarf2 -o hello.o hello.asm
这是我尝试对 C 代码进行 mexify 时收到的错误:
/usr/bin/ld: hello.o: relocation R_X86_64_32 against `.data' can not be used
when making a shared object; recompile with -fPIC
hello.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
nasm 没有 -fPIC 标志。我尝试使用 get_GOT 宏以及默认 rel,但仍然遇到相同的错误。所有帮助将不胜感激。谢谢你