Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++ Qt创建者:将库移动到子目录后无法打开共享对象文件_C++_Qt_Shared Libraries - Fatal编程技术网

C++ Qt创建者:将库移动到子目录后无法打开共享对象文件

C++ Qt创建者:将库移动到子目录后无法打开共享对象文件,c++,qt,shared-libraries,C++,Qt,Shared Libraries,我有一个项目,其中图书馆资源的设置方式如下: MyProject |_MyProject.pro |_MainStuff |_MainStuff.pro |_ManyFiles |_Tests |_Tests.pro |_LotsOfTests |_MyLibs | FunLibs.pro |_FunLib1.h |_FunLib1.cpp |_FunLib2.h |_FunLib2.cpp MyProj

我有一个项目,其中图书馆资源的设置方式如下:

MyProject  
 |_MyProject.pro
 |_MainStuff 
   |_MainStuff.pro
   |_ManyFiles
 |_Tests  
   |_Tests.pro
   |_LotsOfTests
 |_MyLibs  
   | FunLibs.pro
   |_FunLib1.h  
   |_FunLib1.cpp  
   |_FunLib2.h  
   |_FunLib2.cpp 
MyProject  
 |_MainStuff  
   |_ ManyFiles
 |_Tests  
   |_LotsOfTests
 |_MyLibs 
   |_MyLibs.pro 
   |_FunLib1  
     |_FunLib1.pro
     |_FunLib1.h  
     |_FunLib1.cpp  
   |_FunLib2  
     |_FunLib2.pro  
     |_FunLib2.h  
     |_FunLib2.cpp  
这并不理想,因为随着funlib数量的增加,所有的funlib都将包含在一个共享对象中。通过这种设置,一切都可以正常构建和运行。需要明确的是:MyProject.pro是一个subdirs模板,MainStuff.pro是一个应用程序模板,FunLibs是一个lib模板

问题在于,当我按照以下方式重新排列文件时:

MyProject  
 |_MyProject.pro
 |_MainStuff 
   |_MainStuff.pro
   |_ManyFiles
 |_Tests  
   |_Tests.pro
   |_LotsOfTests
 |_MyLibs  
   | FunLibs.pro
   |_FunLib1.h  
   |_FunLib1.cpp  
   |_FunLib2.h  
   |_FunLib2.cpp 
MyProject  
 |_MainStuff  
   |_ ManyFiles
 |_Tests  
   |_LotsOfTests
 |_MyLibs 
   |_MyLibs.pro 
   |_FunLib1  
     |_FunLib1.pro
     |_FunLib1.h  
     |_FunLib1.cpp  
   |_FunLib2  
     |_FunLib2.pro  
     |_FunLib2.h  
     |_FunLib2.cpp  
在这里,MyLibs.pro将成为子文件tempalte,而FunLibx.pro文件将成为lib模板。所有配置都已相应更新,应用程序已生成。问题是,当我现在尝试启动应用程序时,会弹出以下消息:

libFunLib1.so.1:无法打开共享对象文件:没有此类文件或 目录

我真的不明白为什么它现在不能工作,当它与以前的目录结构一起工作时。例如,post(和许多其他人一样)建议通过导出dir来设置LD_LIBRARY_路径,但老实说,我不必在以前的设置中这样做

我还按照“创建共享库”部分中的描述设置了所有内容

有人知道可能是什么问题吗?有没有办法通过不导出路径来解决这个问题


提前谢谢。

好的,我想我找到了解决上述问题的方法。QtCreator也使用LD_LIBRARY_PATH环境变量来执行编译程序,但它有些隐藏。事实证明,它能够使用单独的环境变量集来编译和运行应用程序,如果没有正确定义用于运行的环境变量,即使程序编译正确,用户也会收到原始帖子中提到的错误消息

为了确保运行时也包含所有库路径,需要在此处检查包含的路径:

项目(模式)-->运行设置(在“生成和运行”下)-->运行 环境(展开详细信息)->LD\u LIBRARY\u路径(位于 (列表)


如果该变量不包含正确的路径,则可以对其进行编辑,然后将其高亮显示。设置此选项后,一切似乎都正常。

构建的lib二进制文件(.so文件)将在哪里结束?我猜它们过去与可执行文件(或运行时加载它们的任何文件)处于同一级别,现在它们位于构建树的子文件夹中,默认情况下无法找到。如果是这种情况,可以通过在项目文件中显式设置
qmake
DESTDIR
变量来指定生成的二进制文件的最终位置。