我遇到一個關於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"
有什麼辦法可以解決這個問題嗎?如果我不需要,我真的不想重新組織頭結構或重寫頭並重新編譯庫。
謝謝!
添加'-I在/ usr /本地/包括/ JSBSim/initialization' Makefile中的'CXXFLAGS'。 –
^分別給你的編譯器調用。 –
我剛剛嘗試過,不幸的是沒有成功。 – Peter