Qt 创建器:将库移动到 subdir 后无法打开共享对象文件

Qt Creator: cannot open shared object file after moving library to subdir

本文关键字:共享 文件 对象 subdir 创建 移动 Qt      更新时间:2023-10-16

我有一个项目,其中库源代码的设置方式如下:

MyProject  
|_MyProject.pro
|_MainStuff 
|_MainStuff.pro
|_ManyFiles
|_Tests  
|_Tests.pro
|_LotsOfTests
|_MyLibs  
| FunLibs.pro
|_FunLib1.h  
|_FunLib1.cpp  
|_FunLib2.h  
|_FunLib2.cpp 

这并不理想,因为随着 FunLibs 数量的增加,所有这些内容都将包含在单个共享对象中。通过此设置,一切都可以正常构建和运行。需要明确的是:MyProject.pro 是一个subdirs模板,MainStuff.pro 是一个应用程序模板,FunLibs是一个lib模板。

当我按以下方式重新排列文件时,问题统计:

MyProject  
|_MainStuff  
|_ ManyFiles
|_Tests  
|_LotsOfTests
|_MyLibs 
|_MyLibs.pro 
|_FunLib1  
|_FunLib1.pro
|_FunLib1.h  
|_FunLib1.cpp  
|_FunLib2  
|_FunLib2.pro  
|_FunLib2.h  
|_FunLib2.cpp  

在这里,MyLibs.pro 成为子目录,而 FunLibx.pro 文件将是 lib 模板。所有配置都已相应更新,应用程序已生成。问题是,当我现在尝试启动应用程序时,会弹出以下消息:

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

我真的不明白为什么它现在不起作用,当它与以前的目录结构一起工作时。例如,这篇文章(与许多其他帖子一样(建议通过导出目录来设置LD_LIBRARY_PATH,但老实说,我不必在以前的设置中执行此操作。

我也按照官方文档中"创建共享库"部分下的说明进行了所有设置。

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

提前谢谢。

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

为了确保所有 lib 路径也包含在运行中,需要在此处查看包含的路径:

项目(模式(-->运行设置(在"生成和运行"下(-->运行 环境(展开详细信息(--> LD_LIBRARY_PATH(在 列表(

如果该变量不包含正确的路径,则可以对其进行编辑,之后它将突出显示。设置后,一切似乎都正常。