编译库的标题无法相互联系

时间:2016-11-17 16:59:47

标签: c++ linux makefile static-libraries header-files

我遇到了一个名为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"

有没有办法解决这个问题?我真的不想重新组织头结构或重写头并重新编译库,如果我不需要。

谢谢!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

我将makefile编辑为以下内容:

android:layout_below = "@id/textView1"

希望这有助于某人!