c++ - ldd 神奇地找到了一个 libQtCore

标签 c++ qt unix

当我 LDD 我的程序时,我得到了这条线

libQtCore.so.4 => /Soft/fox_dev/Qt-4.7.4/lib/libQtCore.so.4

但是这条路径既不在我的 PATH 中也不在我的 LD_LIBRARY_PATH 中并且正在执行:

set | grep -i qt

我发现“bin”存储库只在我的路径中

/Soft/fox_dev/Qt-4.7.4/bin/

但是没有为 QtCore 库的路径设置任何环境变量。

问题:“ldd”命令如何找到这个路径? (程序也执行得很好)

最佳答案

ldd 实际上使用负载跟踪执行您的程序。加载程序(ld.so 或 ld-linux.so)使用在目录中安装一个或多个 .so 文件后运行 ldconfig 创建的缓存。可以查相关资料here . 如果您想使用不同的 Qt 安装,有几种方法可以覆盖它。最简单的,就是设置

export LD_LIBRARY_PATH=<my Qt libs location>:$LD_LIBRARY_PATH

在一个脚本中,然后像这样运行一个 shell

bash --posix  # avoid changing the LD_LIBRARY_PATH again by sourcing configuration file

这将仅使用您选择的 Qt 安装来运行您的程序,而不会影响系统中安装的其他程序。 如果您不关心这一点,那么您可以将其添加到您的 shell 配置文件或 bashrc 等中,具体取决于您使用的 shell。

还有一件事:如果您的程序通过链接加载,即 libQtCore.so 或 libQtCore.so.5 等,那么您也需要在“我的 Qt 库位置”中创建这些链接,如果它们不是已经在那里了。

希望这对您有所帮助。

关于c++ - ldd 神奇地找到了一个 libQtCore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21427711/

相关文章:

c++ - if-else 函数的代码优化

python - PyQt 获取ListWidget中的特定值

linux - 如何将带有子文件夹的文件夹转换为gz格式

c - (waitpid((pid_t)-1, NULL, WNOHANG) 如何跟踪要返回的子进程?

bash - 捕获 "rm: fts_read: No such file or directory"错误并继续

c++ - 需要帮助来理解以下类(class)的目的

c++ - 如何纠正对运算符优先级的错误假设以消除代码的副作用?

linux - 重新附加丢失进程的 X 服务器 View

c++ - 如何对齐这样的 GUI 元素? Qt, C++

c++ - 在VS2019中使用括号初始化使用一个元素初始化 vector 时崩溃