【发布时间】:2016-11-17 16:59:47
【问题描述】:
我遇到了关于名为 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
我正在运行一个包含以下内容的生成文件:
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"
有没有办法解决这个问题?如果不需要的话,我真的不想重新组织头文件结构或重写头文件并重新编译库。
谢谢!
【问题讨论】:
-
将
-I/usr/local/include/JSBSim/initialization添加到您的makefile 中的CXXFLAGS。 -
^ 分别到你的编译器调用。
-
我刚试过,可惜没有成功。
-
您需要在编译行中添加
-I/usr/local/bin/JSBSim(注意末尾没有initialization)。
标签: c++ linux makefile static-libraries header-files