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

pri*_*326 2 c linker gcc compilation include

我正在研究一些使用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"
Run Code Online (Sandbox Code Playgroud)

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

.././ode-0.11.1/include/ode/ode.h:28:27: fatal error: ode/odeconfig.h: No such 
file or directory
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

use*_*019 7

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

例如

gcc -I.././ode-0.11.1/include
Run Code Online (Sandbox Code Playgroud)

或者更好的在这个cas绝对路径

然后在代码中包括喜欢

#include "ode/ode.h"
#include "drawstuff/drawstuff.h"
Run Code Online (Sandbox Code Playgroud)

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

链接类似,但两个部分都在命令行上完成.这两部分是由-l变量给出的文件,lib是-L参数所在的目录.此外,如果库是libode.dylib,你只需要使用名称,例如ode.

所以命令行是

gcc -lode -L.././ode-0.11.1/lib
Run Code Online (Sandbox Code Playgroud)