Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图从C程序调用编译后的NASM函数时出现未定义的引用错误_C_Linux_Gcc_Nasm_Undefined Reference - Fatal编程技术网

试图从C程序调用编译后的NASM函数时出现未定义的引用错误

试图从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

我有一个c程序,为了优化该程序,我尝试了以下方法:

  • 分别编译最重的方法(名为my_方法)
  • 反汇编编译方法
  • 编辑编译器生成的汇编代码以优化此
  • 使用NASM编译器编译经过编辑和优化的汇编代码
  • 原始c方法具有此签名

    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 error
    et not enabled“#error”SSE指令集not enabled“
    如果我添加标志
    -march=native
    以启用当前CPU的指令集,我将再次获得对我的\u方法的
    未定义引用
    您可以使用
    objdump
    查找
    我的\u方法.o
    导出的内容。