[英]Compiled library's headers not being able to reach each other
我在与名为JSBSim的库有关的问题。 库本身并不那么相关,但是问题涉及头文件中循环依赖的多种情况。
背景信息:
运行中的CentOS 7 64位库与位于usr / local / include中的标头以及usr / local / lib中的相应.a和.la静态链接。
/ usr / local / include / 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中:
#include "FGFDMExec.h"
看起来FGTrim因为在目录下而无法看到FGFDMExec.h,但是FGFDMExec.h可以看到FGTrim很好,因为在FGFDMExec.h中具有以下内容:
#include "initialization/FGTrim.h"
有什么办法可以解决这个问题? 我真的不需要重组标题结构或重写标题并在不需要时重新编译库。
谢谢!
我解决了这个问题。
我将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
希望可以帮助到别人!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.