2016-11-17 1 views
0

У меня возникла проблема с библиотекой под названием JSBSim. Сама библиотека не так актуальна, но проблемы связаны с несколькими случаями циклической зависимости в файлах заголовков.Заголовки сборных библиотек, не имеющие возможности достигать друг друга

Справочная информация:

Запуск CentOS 7 64 бит - библиотеки статически связаны с заголовками, расположенных в USR/местные/включают в себя и соответствующие .a и .la в USR/структуры локального/Библиотека

директории для/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 включим'S:

#include "FGFDMExec.h" 

Похоже FGTrim не может видеть FGFDMExec.h, потому что это вниз каталог, но FGFDMExec.h может см FGTrim просто отлично, потому что в FGFDMExec.h имеет следующие включают:

#include "initialization/FGTrim.h" 

есть ли способ обойти это? Я действительно не хочу, чтобы реорганизовать структуру заголовка или переписать заголовки и перекомпилировать библиотеку, если мне это не нужно.

Спасибо!

+0

Добавить '-I/usr/local/include/JSBSim/initialization' в' CXXFLAGS' в вашем файле makefile. –

+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