已编译库的标头无法相互访问
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 "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
希望这能帮助到一些人!
相关文章:
- 访问条件类成员的方法不仅在被调用时才编译
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- C ++程序编译错误,找不到/访问文件
- 使用 Bazel 编译 QT 应用程序时访问资源
- C++基于1而不是0的访问数组,方法是在编译时移位
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 如何在Android中从本机编译的c ++二进制文件访问相机
- 如果使用低于 VS2015 的 vc++ 编译器版本编译,则 DLL 中的访问冲突
- 为什么当错误无法访问时,该程序无法编译
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 为什么可以在编译时访问非常量、非静态成员而无需类的实例
- 如何在编译时访问模板化类的模板类型?
- 通过指向成员的指针对嵌套访问进行编译时评估期间出现 GCC 错误
- 尝试访问基类的受保护数据成员时出现编译错误
- 如何避免对编译后无法访问的正在运行的代码部分进行运行时检查?
- 如果在类 temlpate 中使用,fstream 是否会在编译时通过读取和写入来访问 hardrive?
- 如何使用特征访问编译时const值
- 如何访问从C 编译的动态库中定义的全局变量
- 如何访问Python中编译的多个返回变量
- 从 Web UI 访问C++编译的可执行二进制文件