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选项,似乎它必须在引用我链接的库中的函数的文件之后.
您需要在编译行中设置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)
| 归档时间: |
|
| 查看次数: |
3509 次 |
| 最近记录: |