编译ubuntu中的头文件。我在终端输入什么?
问题描述:
我很确定这是一个简单的问题,但我在网上搜索了大约半个小时。编译ubuntu中的头文件。我在终端输入什么?
我有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
这给了我函数 '使'
GCC的错误“隐式声明-o在MyLibrary myLibrary.c这也给了同样的错误。
什么我应该在终端在Ubuntu打字?
所以我假设在myLibrary.c中的puts()函数没有连接到02_01.c,这是我包含stdio.h的地方。
答
您必须在每个文件中包含所需的标题,您需要在其中使用包含的功能。对于您的情况,您必须在myLibrary.c
文件的开头包含#include <stdio.h>
。
此外,您可能想要构建.a
库并稍后与它链接。
所以,最后:
-
编译的lib:
gcc -c -o mylib myLibrary.c
-
让静态库:
ar rcs libMyLib.a mylib
-
编译程序和链接在一起:
gcc -o 02_01 02_01.c -L. -lMyLib
您必须在其中使用该函数的标头,而不是在另一个.c文件中。 gcc无法建立两个文件之间的链接。你的问题是什么?你不想改变文件的内容? –
'myLibrary.c'中的代码使用标准的I/O函数,这些函数在''中声明。所以也许你应该把这个头文件包含在'myLibrary.c'中?头文件只是当前[*翻译单元*](https://en.wikipedia.org/wiki/Translation_unit_(编程))的一部分,它们不会泄漏到其他独立翻译单元。(一个翻译单元基本上是一个单独的源文件及其包含的所有头文件,因此是独立单元。) –
@ Jean-FrançoisFabre谢谢。这就是我在C++中所做的。我实际上是从Lynda接下来的一段视频课,这些都是作为例子提供的文件。他们在Windows中使用Eclipse,所以也许这就是为什么它为他们工作,而不是在Ubuntu上为我工作。 – t3hdaniel