未定义参考功能

时间:2010-12-23 14:51:20

标签: c compiler-construction linker linker-errors

我的主目录中有以下目录。

  1. 包括

  2. 在源目录中,我有以下文件:

    a.c

    #include <stdio.h>
    #include "a.h"
    
    extern void function(void);
    
    int main() 
    {
    
        printf("PREDEFINED = %d\n",PREDEFINED); 
        function();  
        return 0; 
    }
    

    b.c

    #include <stdio.h>
    void function() 
    {
        printf("Hello from function\n"); 
    }
    

    a.h

    #define PREDEFINED 100
    

    我编译了b.c并将b.o移动到了Lib文件夹。

    然后我尝试了source文件夹

    中的以下命令
    gcc -Wall -o temp a.c -I../include -L../Lib
    

    但它显示以下错误 a.c: undefined reference to function``

    但是当我使用以下命令时,它会生成输出文件temp而没有任何错误

    gcc -Wall -o temp a.c -I../include ../Lib/b.o
    

    我哪里错了?

2 个答案:

答案 0 :(得分:5)

目标文件不是库。试试这个来创建和使用一个简单的静态库:

ar rcs ../Lib/libb.a b.o
gcc -Wall -o temp a.c -I../include -L../Lib -lb

静态库通常包含多个对象。您可以将完整的对象列表添加到ar行。请注意,选项-l{name}会使链接器找到名为lib{name}.a的文件。

答案 1 :(得分:0)

在第一个命令中,您只需将Lib定义为查找库的位置。但是,您没有指定要链接的任何库,并且无论如何库路径都不用于查找目标文件。

在第二个命令中,您明确指定要用作链接器输入的目标文件。

因此,第一个命令找不到函数function(),而第二个命令则找不到。