在ubuntu中编译头文件。我在终端输入什么?

时间:2017-09-25 12:12:26

标签: c ubuntu gcc terminal

我很确定这是一个简单的问题,但我在网上搜索了大约半个小时。

我有3个文件:

02_01.c

#include <stdio.h>          // Notice the library included in the header of this file
#include <stdlib.h>

#include "myLibrary.h"      // Notice that myLibrary.h uses different include syntax

#define MAX_LENGTH 21.8
#define WORK_WEEK  5

int main(void) {
    function1();
    return EXIT_SUCCESS;
}

myLibrary.c

void function1(void){
    puts("It works :)");
}

void function2(void){
    //This function does nothing as well
}

myLibrary.h

#ifndef MYLIBRARY_H_
#define MYLIBRARY_H_

void function1(void);
void function2(void);

#endif /* MYLIBRARY_H_ */

首先,我导航到我的工作目录。 通常在没有本地标题的文件中,我会输入:

gcc -o 02_01 02_01.c
./02_01

它会起作用。

我尝试过各种各样的事情:

gcc -o 02_01 02_01.c myLibrary.c

这给了我一个错误“隐式声明函数'puts'

gcc -o myLibrary myLibrary.c也会出现同样的错误。

我应该在ubuntu的终端输入什么内容?

所以我假设myLibrary.c中的puts()函数没有连接到02_01.c,这是我包含stdio.h的地方。

1 个答案:

答案 0 :(得分:1)

您必须在每个使用包含函数的文件中包含必需的标头。在您的情况下,您必须在#include <stdio.h>文件的开头添加myLibrary.c

此外,您可能希望构建.a库并稍后与其链接。

所以,最后:

  1. 编译lib:

         gcc -c -o mylib myLibrary.c
    
  2. 制作静态lib:

         ar rcs libMyLib.a mylib
    
  3. 编译应用并链接在一起:

         gcc -o 02_01 02_01.c -L. -lMyLib