我正在尝试将两个.c文件放在一起。我迷失在如何做到这一点,我有一个简单的设置为每个文件,但我尝试编译时得到一个未定义的format_lines错误引用。任何帮助都会非常感激;
formatter.h
#ifndef _FORMATTER_H_
#define _FORMATTER_H_
#include <stdio.h>
char **format_file(FILE *);
char **format_lines(char **, int);
void test();
#endif
formatter.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "formatter.h"
char **format_file(FILE *infile) {
return NULL;
}
char **format_lines(char **lines, int num_lines) {
char **result = NULL;
#ifdef DEBUG
result = (char **)malloc(sizeof(char *) * 2);
if (result == NULL) {
return NULL;
}
result[0] = (char *)malloc(sizeof(char) * 80);
if (result[0] == NULL) {
return NULL;
}
strncpy(result[0], "(machine-like voice) EXTERMINATE THEM!", 79);
result[1] = (char *)malloc(sizeof(char) * 2);
if (result[1] == NULL) {
return NULL;
}
result[1][0] = '\0';
#endif
}
void test(){
print("here");
}
和sengfmt.c
#include <stdio.h>
#include <stdlib.h>
#include "formatter.h"
int main(int argc, char *argv[]) {
test();
#ifdef DEBUG
printf("%s does nothing right now.\n", argv[0]);
#endif
exit(0);
}
当我尝试编译时,我只需输入它。
$ gcc sengfmt3.c
/tmp/cc7Ttgne.o: In function `main':
sengfmt3.c:(.text+0x15): undefined reference to `test'
collect2: ld returned 1 exit status
答案 0 :(得分:0)
我怀疑你的主要用来尝试调用format_lines
你需要这样做
gcc formatter.c sendgfmt.c -o myprog
您必须列出要一起编译的所有c文件
答案 1 :(得分:0)
如果您有多个源文件中的代码,则需要使用所有源文件进行构建。
有两种方法可以做到这一点:
使用以下命令编译和链接所有源文件:
$ gcc sengfmt3.c someOtherSourceFile.c someThirdSourceFile.c
首先制作所有源文件的目标文件,然后将目标文件链接在一起。这是更多的工作,但是如果你有一个makefile或其他构建系统,它会更好,因为只会重新编译修改过的源文件,并且可能会节省一些构建时间:
$ gcc -c sengfmt3.c
$ gcc -c someOtherSourceFile.c
$ gcc -c someThirdSourceFile.c
$ gcc sengfmt.o someOtherSourceFile.o someThirdSorceFile.o
注意编译的命令行选项-c
,这告诉GCC生成目标文件。另请注意,对于链接命令(最后一个),文件扩展名已从.c
更改为.o
。
第1点中的命令在内部使用临时文件执行此操作,这些文件在完成后将被删除。