头文件和多个c程序

时间:2014-07-29 23:32:20

标签: c

我正在尝试将两个.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

2 个答案:

答案 0 :(得分:0)

我怀疑你的主要用来尝试调用format_lines

你需要这样做

gcc formatter.c sendgfmt.c -o myprog

您必须列出要一起编译的所有c文件

答案 1 :(得分:0)

如果您有多个源文件中的代码,则需要使用所有源文件进行构建。

有两种方法可以做到这一点:

  1. 使用以下命令编译和链接所有源文件:

    $ gcc sengfmt3.c someOtherSourceFile.c someThirdSourceFile.c
    
  2. 首先制作所有源文件的目标文件,然后将目标文件链接在一起。这是更多的工作,但是如果你有一个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点中的命令在内部使用临时文件执行此操作,这些文件在完成后将被删除。