繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM