我正在尝试链接两个文件。意思是,有文件“file1.c”和“file2.c”。
file1.c中
#include"stdlib.h"
#include"stdio.h"
void function1(int a)
{
printf("hello I am file%d.c\n ", a);
}
void main()
{
function1(1);
}
file2.c中
#include"stdlib.h"
#include"stdio.h"
#include"file.h"
void function2(int b)
{
printf("hello I am file%d.c\n", b);
}
int main()
{
function2(2);
function1(1);
}
然后我将头文件file.h设为
#ifndef hell
#define hell
void function1(int a);
#endif
当我将file2.c编译为“gcc file2.c file1.c -o file2时 “它给出了以下错误
/tmp/cc4tno9R.o: In function `main':
file1.c:(.text+0x24): multiple definition of `main'
/tmp/ccL4fEki.o:file2.c:(.text+0x24): first defined here
collect2: ld returned 1 exit status
如何在头文件中写入?头文件中有错误吗? 或者file2.c中的错误?
那么extern呢?它是否用于相同的目的?
答案 0 :(得分:3)
您不需要在第一个文件中包含所有库文件。只需将其保存为带有" .h"的库文件。扩展为库文件并将其包含在第二个文件中,如下所示。
file1.h
void function1(int a) {
printf("hello I am file%d.c\n ", a);
}
file2.c中
#include <stdlib.h>
#include <stdio.h>
#include "file.h"
void function2(int b) {
printf("hello I am file%d.c\n", b);
}
int main() {
function2(2);
function1(1);
return 0;
}
答案 1 :(得分:2)
说目录结构如下:
Project
|
------------------------------
| | |
csource output header
| | |
*.c files executable .h files
files
现在,将这两个.c files
放在source
文件夹中。
<强> function.c 强>
int sum(int a, int b)
{
return (a + b);
}
<强>的main.c 强>
#include <stdio.h>
#include <stdlib.h>
#include <mymath.h>
int main(void)
{
int result = sum(11, 19);
printf("Result: %d\n", result);
return EXIT_SUCCESS;
}
将此标题文件放在header
文件夹中。
<强> mymath.h 强>
#ifndef _MyMath_H__
#define _MyMath_H__
int sum(int, int);
#endif
<强>汇编强>
首先,我们将汇编function.c
个文件并创建一个object file
扩展名.o
,如下所示:
C:\Mine\C\test\project>gcc -o output\function.o -c source\function.c
On Cygwin:
Gagandeep Bali@LAPTOP ~/c/Mine/C/test/project
$ gcc -o output/function.o -c source/function.c
由于function.c
不包含main
方法,因此我们只使用-c
选项,仅创建object file
。
在这里,使用-I
选项,基本上告诉编译器,在哪里寻找包含文件。因为,我们正在定义我们的header
文件夹,因此,您可以使用#include <mymath.h>
代替#include "mymath.h". Now we will compile the
main.c`文件:
C:\Mine\C\test\project>gcc -o output\main -I header\ -Wall source\main.c output\function.o
On Cygwin:
Gagandeep Bali@LAPTOP ~/c/Mine/C/test/project
$ gcc -o output/main -I header/ -Wall source/main.c output/function.o
现在可以运行它,例如:
C:\Mine\C\test\project>.\output\main
Result: 30
On Cygwin:
Gagandeep Bali@LAPTOP ~/c/Mine/C/test/project
$ ./output/main
Result: 30
您还可以创建可以使用的自定义函数的静态和动态库。我只知道,如何创建一个静态库。
如果您想创建自己的静态库,只需先将所有object files
放入库中即可。为此目的创建另一个文件夹,例如library
。现在在库中添加所有.o
个文件,如下所示:
Gagandeep Bali@LAPTOP ~/c/Mine/C/test/project
$ ar cr library/mymathlibrary.a output/function.o
现在只需编译程序,如:
Gagandeep Bali@LAPTOP ~/c/Mine/C/test/project
$ gcc -Wall source/main.c library/mymathlibrary.a -o output/main -I header
按照前面的说明运行。
答案 2 :(得分:1)
所以看起来应该是这样的:
file1.c中:
#include <stdlib.h>
#include <stdio.h>
void function1(int a) {
printf("hello I am file%d.c\n ", a);
}
file2.c中:
#include <stdlib.h>
#include <stdio.h>
#include "file.h"
void function2(int b) {
printf("hello I am file%d.c\n", b);
}
int main() {
function2(2);
function1(1);
return 0;
}
答案 3 :(得分:1)
运行程序main
正在调用。如果你有2个主要定义,应该调用哪一个?
应该有一个文件包含main
,另一个文件包含您要在第一个文件中使用的功能。