已编译库的标头无法相互访问

Compiled library's headers not being able to reach each other

本文关键字:访问 编译      更新时间:2023-10-16

我遇到了一个关于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 "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

希望这能帮助到一些人!