Qt 创建器:将库移动到 subdir 后无法打开共享对象文件
Qt Creator: cannot open shared object file after moving library to subdir
我有一个项目,其中库源代码的设置方式如下:
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(在 列表(
如果该变量不包含正确的路径,则可以对其进行编辑,之后它将突出显示。设置后,一切似乎都正常。
- 在共享文件夹上恢复有效权利的问题
- C 11中线程之间的共享文件记录
- 在线程之间共享文件描述符
- ReadFile winapi在从虚拟盒共享文件夹读取时失败.GetLastError正在引发错误183
- 在写入远程Windows共享文件夹的所有者时,GetNamedSecurityInfo返回ERROR_ACCESS_DE
- 以编程方式在非 Windows 计算机中创建共享文件夹
- 在 DLL 中打开共享文件
- 在VirtualBox的共享文件夹中构建符号链接共享库
- 如何在Windows平台中获取远程Windows服务器的共享文件夹的文件列表
- Qt:有共享文件夹的类吗?
- 在Windows 2008 R2服务器/ Windows 7中,判断谁正在访问共享文件夹中的文件
- OpenMP共享文件处理程序
- NetShareEnum(.)winapi无法删除不必要的共享文件夹
- NuGet与TeamCity的项目由2个解决方案共享- .h文件未找到
- 如何共享文件删除权限时,我打开一个文件ifstream
- 为共享文件使用预处理器指令
- 在QtC++中将一个简单文件夹转换为共享文件夹
- 如何让python识别读取预编译的共享文件
- 共享文件视图-访问控制
- 在Visual C++10中在项目之间共享文件