为什么我的include指令不能在gcc中运行?

时间:2011-08-08 22:24:47

标签: c gcc linker include compilation

我正在处理一些使用Open Dynamics Engine的代码。我之前在windows上使用过这段代码,但现在我正在转向unix,所以我可以在unix环境下获得使用C的经验,所以我不依赖于visual studio。我将所有内容下载到我的主目录,使用附带的makefile构建并尝试了一个演示;一切都很好。我用自己的测试在其中创建了一个目录和一个测试文件。对于我指定的#include:

#include ".././ode-0.11.1/include/ode/ode.h"
#include ".././ode-0.11.1/include/drawstuff/drawstuff.h"

由于库只位于我的主目录中,而不在标准位置。我去编译我的代码但是:

.././ode-0.11.1/include/ode/ode.h:28:27: fatal error: ode/odeconfig.h: No such 
file or directory

查看ode.h,它包含一堆其他标题,它们都位于同一目录中,但使用括号语法而不是引号。我猜这与gcc无法找到其他标题的原因有关。我查看了makefile,但不知道我的问题是什么。为什么我的编译不起作用?一个详细/彻底的答案将不胜感激,因为我想了解这一切是如何工作的(链接,包括,制作等)。

编辑:所以我想出了如何正确包含标题,现在我需要弄清楚如何链接到函数的库定义......

Edit2:仍然无法弄清楚如何链接到我的代码。已编译的静态库将转储到'〜/ ode-0.11.1 / ode / src / .libs'和'〜/ ode-0.11.1 / drawstuff / src / .libs'中以用于绘图函数。

编辑3:我想我弄明白了。我没有正确使用-l选项,似乎它必须在引用我链接的库中的函数的文件之后。

2 个答案:

答案 0 :(得分:7)

您需要在编译行中设置include目录

e.g。

gcc -I.././ode-0.11.1/include

或更好的这个cas绝对路径

然后在代码中包括

#include "ode/ode.h"
#include "drawstuff/drawstuff.h"

因此,将从同一目录访问ode.h中包含的所有文件。您的示例ode / odeconfig.h将被找到,因为ode是-I参数中包含路径的子目录。

链接类似,但两个部分都是在命令行上完成的。这两部分是由-l变量给出的文件,lib是-L参数所在的目录。此外,如果图书馆说libode.dylib,你只需要说出这个名字,例如:赋

所以命令行是

gcc -lode -L.././ode-0.11.1/lib

答案 1 :(得分:0)

转到目录ode-0.11.1 这将是项目的家。

因此包含属于目录ode-0.11.1 / include的文件 在这种情况下,您的来源应该像

myprog.c中

#include "ode/ode.h"
#include "drawstuff/drawstuff.h"

编译命令应该是一行:

gcc -I./include/ode -I./include/drawstuff  myprog.c -o myprog

在目录ode-0.11.1 / include

中执行的命令