试图从C程序调用编译后的NASM函数时出现未定义的引用错误
我有一个c程序,为了优化该程序,我尝试了以下方法:试图从C程序调用编译后的NASM函数时出现未定义的引用错误,c,linux,gcc,nasm,undefined-reference,C,Linux,Gcc,Nasm,Undefined Reference,我有一个c程序,为了优化该程序,我尝试了以下方法: 分别编译最重的方法(名为my_方法) 反汇编编译方法 编辑编译器生成的汇编代码以优化此 使用NASM编译器编译经过编辑和优化的汇编代码 原始c方法具有此签名 float **my_method(int m, int n, float **MatrixA, float **VectorB){ //method boby } 问题: 如何从C调用该方法的编译优化“NASMed”版本 我试图在c文件的开头声明这一点 extern float
float **my_method(int m, int n, float **MatrixA, float **VectorB){
//method boby
}
问题:
如何从C调用该方法的编译优化“NASMed”版本
我试图在c文件的开头声明这一点
extern float **my_method(int m, int n, float **MatrixA, float **VectorB);
但是当我尝试在c中调用该方法时,例如
float **res= mymethod(rows, columns, matrix1, vect);
GCC向我返回以下错误:
对my_方法的未定义引用
编译后的程序集文件名为myu-method.o
myc文件名为myu-program.c
我曾尝试使用gcc my_program.c编译
gcc -Wall -Wextra -pedantic my_program.c -o my_program my_method.o
由于my\u method.o
是NASM编译的结果。这是链接器错误。你使用什么链接器选项?@alk我肯定错过了什么。我只使用经典命令gcc-o1-s myfile.c
进行编译,没有指定任何链接器选项。您需要告诉gcc有关my_method.o文件的信息,以便在链接时将其包括在内。-o1
的意思是-o1
,不是吗?优化是使用大写的o
进行排序的!小的o
定义要生成的输出文件的名称<代码>-o1
在您的情况下,将创建名为1
的最终可执行文件。谢谢您的回答。-Wall-Wextra和-pediandic的含义是什么?这些是启用警告的选项。有关更多信息,请阅读此处:@AndreaFI get the erroret not enabled“#error”SSE指令集not enabled“
如果我添加标志-march=native
以启用当前CPU的指令集,我将再次获得对我的\u方法的未定义引用
您可以使用objdump
查找我的\u方法.o
导出的内容。