2

我已经为此工作了一段时间。我有这些文件:

main.c
zSim.h 
zSim.c
zDynamicArray.h 
zDynamicArray.c
zOptions.h 
zOptions.c
zMain.h 
zMain.c

所有文件和标题都位于同一文件夹中。

我的主要有以下内容:

#include "zDynamicArray.h"
#include "zOptions.h"
#include "zMain.h"
#include "zSim.h"
#include <stdio.h>
#include <math.h>

我正在使用头卫。例如,这是来自我的 zSim.h 文件:

#ifndef SIM_H
#define SIM_H
#include "zDynamicArray.h"
#include "zOptions.h"

//This Header is accountable
//for all Simulation Related things. 

int Simulate(SIMOPT so,PRINTOPT po);

#endif

这是我的 zSim.c 代码的一个片段(也许我在这里做错了什么?):

#define M_PI 3.14159265358979323846
#include "zSim.h"
#include "zDynamicArray.h"
#include "zOptions.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

我正在使用这个 gcc 命令进行编译:

gcc main.c zSim.c zOptions.c zDynamicArray.c zMain.c -o TEST

我也用过:

cc -c main.c
cc -c zSim.c
cc -c ... etc
cc *.o -o TEST

它们都会导致 math.h 库中任何内容的未定义引用。此外,当我使用该gcc -I命令时,数学仍然未定义。

如果我使用 编译gcc main.c,我的头文件中的任何内容都会得到未解析的引用。

我该怎么办?

4

2 回答 2

4

尝试-lm在最后添加:gcc -c main.c cc -c zSim.c cc -c ... etc cc *.o -o TEST -lm

您必须使用 -lm 选项链接数学库。原因在这里解释:为什么必须在 C 中链接数学库?

于 2013-03-15T13:00:59.263 回答
2

它们都会导致 math.h 库中任何内容的未定义引用

math.h只是包含原型和类型声明的头文件。创建可执行文件时,您还需要链接数学库。添加-lm到您的 gcc 调用中:

gcc main.c zSim.c zOptions.c zDynamicArray.c zMain.c -o TEST -lm

另请参阅对 `sin` 的未定义引用

于 2013-03-15T13:00:50.233 回答