2011-08-08 138 views
2

我正在研究一些使用Open Dynamics Engine的代碼。我之前在Windows上使用過這段代碼,但現在我正轉向unix,以便我可以在unix環境下獲得與C一起工作的經驗,所以我不依賴於visual studio。我將所有東西下載到了我的主目錄,使用附帶的makefile構建並嘗試了一個演示;一切都很好。我用我自己的測試做了一個目錄和一個測試文件。對於我指定的#include:爲什麼我的include指令不能在gcc中工作?

#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

這可能有助於看看你的makefile和目錄中碼S在 - 注意你的代碼不應該在任何的目錄 – Mark

+0

目前我沒有使用我自己的makefile,因爲我只編譯1個文件。它位於'〜/ code/myfile.cpp'中。 – primehunter326

+0

因此,如果它是ode makefile,那麼會生成〜/ ode-0.11.1/ode/src/.libs - 然後我懷疑你也應該做一個make install – Mark

回答

7

您需要設置包括目錄中的編譯行

例如

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

或更好的在這個中科院的絕對路徑

然後在代碼中包括像

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

因此,所有的文件,包括來自ode.h會從同一目錄進行訪問。你的ode/odeconfig.h例子會被找到,因爲ode是來自-I參數中include路徑的一個subdirectoy。

鏈接是相似的,但兩個部分都在命令行上完成。兩部分是由-l變量給出的文件和lib在-L參數中的目錄。另外,如果庫是說libode.dylib,那麼你只需要知道它的名字,例如頌。

所以命令行是

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

是的,我能夠通過'#include '和'#include '找到頭文件並按照你所描述的指定了路徑,但是它仍然找不到函數的定義。已編譯的'.lo'文件全部都被轉儲到'〜/ ode-0.11.1/ode/src /'中,我嘗試使用'-L'標誌指定它,但它不起作用。 – primehunter326

+0

啊對象文件 - 你需要給每個文件的完整路徑 - 你在編譯ode還是使用ode庫的程序 – Mark

+0

是的,我的代碼位於一個單獨的目錄中。但是我不能僅僅鏈接到我原始文章(第二編輯)中提到的路徑中的* .a文件? – primehunter326

0

進入目錄ODE-0.11.1 這將是該項目的主頁。

所以包括文件屬於目錄ODE-0.11.1 /包括 在這種情況下,您的來源應該是像

MYPROG。ç

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

編譯命令應該是這樣的行:在目錄ODE-0.11.1執行

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

命令/包括

+0

這將不起作用,因爲你在include和-I路徑中都有ode或drawstuff,它只能在一箇中找到根包含,並且必須是我允許包含ode.h中的文件的方式。 – Mark

相關問題