2016-11-17 107 views
0

我遇到一個關於JSBSim庫的問題。庫本身並不那麼相關,但問題是在頭文件中包含多個循環依賴的情況。編譯過的庫的頭文件不能互相訪問

背景信息:

運行的CentOS 7 64位 - 庫靜態地位於USR /本地報頭連接/包括和USR /本地/ lib中

目錄結構對應u和.la對於在/ usr /本地/包括/ JSBSim是如下:

initialization 
input_output 
math 
models 
simgear 
FGFDMExec.h 
FGJSBBase.h 

我運行一個makefile,內容如下:

all: 
    g++ *.cpp -lJSBSim -o output 

clean: 
    /bin/rm -f output 

我寫了JSBSim包裝的基本骨架如下:

#include <JSBSim/FGFDMExec.h> 

class JsbSimWrapper 
{ 
}; 

我收到以下錯誤,當我運行makefile:

compilation terminated. 
In file included from /usr/local/include/JSBSim/FGFDMExec.h:47:0, 
       from JsbSimWrapper.hpp:7, 
       from main.cpp:1: 
/usr/local/include/JSBSim/initialization/FGTrim.h:53:23: fatal error: FGFDMExec.h: No such file or directory 
#include "FGFDMExec.h" 
        ^
compilation terminated. 
make: *** [all] Error 1 

的錯誤並不來自班級本身;而是包含庫的主頭文件。我做了一些調查,並且該文件FGTrim.h位於初始化,並在FGTrim的包括的:

#include "FGFDMExec.h" 

它看起來像FGTrim無法看到FGFDMExec.h因爲它是下來的目錄,但FGFDMExec.h能看FGTrim就好了,因爲在FGFDMExec.h中有以下內容:

#include "initialization/FGTrim.h" 

有什麼辦法可以解決這個問題嗎?如果我不需要,我真的不想重新組織頭結構或重寫頭並重新編譯庫。

謝謝!

+0

添加'-I在/ usr /本地/包括/ JSBSim/initialization' Makefile中的'CXXFLAGS'。 –

+0

^分別給你的編譯器調用。 –

+0

我剛剛嘗試過,不幸的是沒有成功。 – Peter

回答

0

我解決了這個問題。

我編輯我的makefile以下幾點:

JSBSIM=/usr/local/include/JSBSim 
CXXFLAGS=-I$(JSBSIM) 
CXXFLAGS+=-I$(JSBSIM)/initialization 
CXXFLAGS+=-I$(JSBSIM)/simgear/xml 
CXXFLAGS+=-I$(JSBSIM)/simgear 
CXXFLAGS+=-I$(JSBSIM)/models/atmosphere 
CXXFLAGS+=-I$(JSBSIM)/models/propulsion 
CXXFLAGS+=-I$(JSBSIM)/models/flight_control 
CXXFLAGS+=-I$(JSBSIM)/models 
CXXFLAGS+=-I$(JSBSIM)/input_output 
CXXFLAGS+=-I$(JSBSIM)/math 

output: main.cpp JsbSimWrapper.cpp 
    g++ main.cpp JsbSimWrapper.cpp $(CXXFLAGS) -lJSBSim -o output 
clean: 
    /bin/rm -f output 

希望幫助別人!

+0

如果你真的需要除第一行以外的任何東西,我會感到驚訝'-I $(JSBSIM)'。如果你真的需要所有這些,那麼這個包的頭文件格式不正常。 – MadScientist