我已经创建了自己的样本库,并且想在主文件中使用它。我所有的代码是:
总和:
#ifndef _SUM_H_
#define _SUM_H_
int add(int n1, int n2);
#endif
摘要:
#include <stdio.h>
#include "sum.h"
int add(int n1, int n2)
{
return n1 + n2;
}
main.c:
#include "sum.h"
int main(int argc, char* argv[])
{
printf("%d", add(1, 2));
return 0;
}
为了使用该库,我编写了以下命令:
gcc -c -o sum.o sum.c
ar rcs libsum.a sum.o
gcc main.c
我的问题是,编译主文件的最后一个命令向我返回该错误:
main.c: In function ‘main’:
main.c:5:2: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
printf("%d", suma(1, 2));
^
/tmp/ccyhA7Bc.o: In `main' function:
main.c:(.text+0x1a): reference to `sum' undefined
collect2: error: ld returned 1 exit status
所有文件都在同一目录中。我的错误在哪里?我该如何解决?
最佳答案
您必须在库中链接,它不会自动查找:
gcc main.c libsum.a
或者,如果您喜欢:
gcc main.c -L. -lsum
这些选项是:
-L.
将当前目录添加到库路径。通常只包括系统目录和编译器目录。-lsum
在库路径中查找libsum.a
(或动态库变体libsum.so
)。请注意,只有一个目标文件的库不是很有用:您可以链接:
gcc main.c sum.o
关于警告,您必须在使用
#include <stdio.h>
的每个编译单元中均printf()
。您在sum.c
中具有它,但是这不能使声明可用于main.c
。如果将它添加到sum.h
中,则该文件将包含在内(并不是将随机的include
添加到头文件中是个好主意)。