Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用多个子项目时,无法打开C1083包含文件_C++_Qt - Fatal编程技术网

C++ 使用多个子项目时,无法打开C1083包含文件

C++ 使用多个子项目时,无法打开C1083包含文件,c++,qt,C++,Qt,我尝试在Qt5.x中使用带有动态链接库的多个子项目(尝试使用5、13和5.8) 我使用QtCreator创建了一个主要的小部件项目和一些简单的库 在主项目中,我使用QtCreator包含另一个项目作为内部库 我还在顶层文件夹的.pro文件中添加了依赖项 TEMPLATE = subdirs SUBDIRS += \ bla \ blub \ main \ untitled bla.depends = blub untitled main.depends = b

我尝试在Qt5.x中使用带有动态链接库的多个子项目(尝试使用5、13和5.8)

我使用QtCreator创建了一个主要的小部件项目和一些简单的库

在主项目中,我使用QtCreator包含另一个项目作为内部库

我还在顶层文件夹的.pro文件中添加了依赖项

TEMPLATE = subdirs

SUBDIRS += \
    bla \
    blub \
    main \
    untitled

bla.depends = blub untitled
main.depends = bla blub
在每个子项目中,都有一个*_全局定义导出

#if defined(BLA_LIBRARY)
#  define BLA_EXPORT Q_DECL_EXPORT
#else
#  define BLA_EXPORT Q_DECL_IMPORT
#endif
在mainwindow.cpp中,我可以包含另一个子项目的头文件,例如

#include "bla.h"

...
Bla *bla = new Bla();
将#include“bla.h”放在mainwindow.h中也没有问题

我也可以在main中包括blub.h等内容

我的问题是使用另一个库中的另一个库

我做同样的步骤

在bla.pro中

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../blub/release/ -lblub
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../blub/debug/ -lblub
else:unix: LIBS += -L$$OUT_PWD/../blub/ -lblub

INCLUDEPATH += $$PWD/../blub
DEPENDPATH += $$PWD/../blub
现在,只要我尝试“包含blub.h”,就会出现以下问题:

如果我在bla.h的头中执行此操作,则会出现一个错误,即找不到文件。(无此类文件或目录)

有趣的是,我可以将它包含在bla.c中,但一旦创建了对象blub,它就会在执行过程中崩溃

现在我在理解Qt的行为方面遇到了一个问题

如果我在main window.h中包含blub.h,我也可以在bla.h中的其他项目中包含blub.h。没有错误,没有丢失的文件,在执行过程中没有崩溃。但这个“修正”似乎是完全错误的

我在使用其他图书馆的图书馆时是否有一些误解?为什么我只能从一开始不使用库的widget中包含它


背景:我想使用一种策略模式,并有不同策略的接口。在我的项目中,如果
main
使用
bla
bla
使用
blub
,我有
main
bla
bulb
的链接。即使
main
不需要
blub
包含路径,
main
也必须与libblub.so链接。这是我只在Linux下注意到的情况

因此,在main.pro中,只需替换

else:unix: LIBS += -L$$OUT_PWD/../bla/ -lbla

没有更多的变化,它的工作


我发现了类似的情况。根据答案,
-fPIC
应该解决问题(然后
main
只能链接
bla
),但我检查了,
-fPIC
在我的构建环境中默认使用,它不会解决问题(
main
必须链接
bla
blub
).

这是一个问题吗?您能将示例代码“git推”到github吗?“我希望有人能帮助你。”杰博纳里乌斯:这里面没有循环。要点到bla,bla到blub。@AllenZHU将其上传到。这只是一个演示,展示我认为不必要的blub.h的意思。在mainwindow.h中,如果删除它,则没有任何效果。如果我在
bla.h
的标题中执行此操作,则会出现无法找到文件的错误。。这与什么取决于谁无关。。。因为编译任何东西之前.h文件应该在那里。。。
#include
中的路径应正确。。你需要先把这件事做好!很抱歉该文件似乎即将过期。我在这里举了一个非工作和工作的例子。我的主要问题是你的结论。main不依赖于blub,因为只有bla.c使用它。在这种情况下,存在运行时错误。如果main依赖于blub并包含blub.hSo,则会消失。在最后一种情况下,main应使用bla.h,并且只有bla.c创建blub类型的对象。从依赖关系来看,如果编译器构建bla,那么应该创建blub。main不直接使用blub。那么为什么bla.c中有问题?你能发布准确的运行时错误吗?@Offler:请查看我的更新。在Linux下,我认为
main
必须与
bulb
@frederic no链接。在windows下,如果我尝试调试“意外终止的cbd进程”,则只有“意外关闭”
else:unix: LIBS += -L$$OUT_PWD/../bla/ -lbla -L$$OUT_PWD/../blub/ -lblub