我很确定这是一个简单的问题,但我在网上搜索了大约半个小时。
我有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的地方。
答案 0 :(得分:1)
您必须在每个使用包含函数的文件中包含必需的标头。在您的情况下,您必须在#include <stdio.h>
文件的开头添加myLibrary.c
。
此外,您可能希望构建.a
库并稍后与其链接。
所以,最后:
编译lib:
gcc -c -o mylib myLibrary.c
制作静态lib:
ar rcs libMyLib.a mylib
编译应用并链接在一起:
gcc -o 02_01 02_01.c -L. -lMyLib