我正在处理一些使用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选项,似乎它必须在引用我链接的库中的函数的文件之后。答案 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
中执行的命令