dim*_*s93 6 c undefined-reference
我有以下简单的程序,我试图在linux ubuntu中编译.
Main.c
:
#include <stdio.h>
#include "Person.h"
int main()
{
struct Person1 p1 = Person1_Constructor(10, 1000);
}
Run Code Online (Sandbox Code Playgroud)
Person.c
:
#include <stdio.h>
#include "Person.h"
struct Person1 Person1_Constructor(const int age, const int salary)
{
struct Person1 p;
p.age = age;
p.salary = salary;
return p;
};
Run Code Online (Sandbox Code Playgroud)
Person.h
:
struct Person1
{
int age, salary;
};
struct Person1 Person1_Constructor(const int age, const int salary);
Run Code Online (Sandbox Code Playgroud)
为什么我会收到以下错误?
/tmp/ccCGDJ1k.o: In function `main':
Main.c:(.text+0x2a): undefined reference to `Person1_Constructor'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc Main.c -o Main
编译.
当您链接程序时,您需要同时提供 Main.o 和 Person.o 作为输入。
构建通常分两步完成(1)编译和(2)链接。要编译您的源代码,请执行以下操作:
$ gcc -c -o Main.o Main.c
$ gcc -c -o Person.o Person.c
Run Code Online (Sandbox Code Playgroud)
或者在一行中:
$ gcc -c Main.c Person.c
Run Code Online (Sandbox Code Playgroud)
然后必须将生成的目标文件链接到单个可执行文件中:
$ gcc -o Main Main.o Person.o
Run Code Online (Sandbox Code Playgroud)
对于像您这样的几个编译单元的小型项目,这两个步骤都可以在一次gcc
调用中完成:
$ gcc -o Main Main.c Person.c
Run Code Online (Sandbox Code Playgroud)
两者都必须给予文件,因为某些符号在Person.c
被使用Main.c
。
对于较大的项目,两步过程允许仅编译在生成可执行文件期间更改的内容。通常这是通过 Makefile 完成的。
归档时间: |
|
查看次数: |
44207 次 |
最近记录: |