在 Linux 中将路径添加到 Qt Creator 中的库时出错
Posted
技术标签:
【中文标题】在 Linux 中将路径添加到 Qt Creator 中的库时出错【英文标题】:Error when path is added to libraries in Qt Creator in Linux 【发布时间】:2018-04-07 04:22:35 【问题描述】:如果我在 Linux 的 Qt Creator 4.6.0 中创建一个新的 Qt Widget 应用程序并将以下行添加到 pro 文件中:
LIBS += -L/opt/MATLAB/R2018a/sys/os/glnxa64
它编译没有任何问题,但它不运行。它显示了这个 Segmentation fault 错误:
这是/opt/MATLAB/R2018a/sys/os/glnxa64
中的文件列表:
libgcc_s.so.1
libgfortran.so.3
libgfortran.so.3.0.0
libifcore.so.5
libifport.so.5
libimf.so
libintlc.so.5
libiomp5.so
libirc.so
libquadmath.so.0
libquadmath.so.0.0.0
libstdc++.so.6
libstdc++.so.6.0.22
libsvml.so
README.libstdc++
为什么会发生这种情况以及如何解决?
【问题讨论】:
您的 QMAKE 文件中的行看起来是正确的,您也可以发布您的代码吗?因为这似乎是一个运行时问题 没有代码。正如我在问题中提到的,我只是制作了一个new
Qt Widget Application 并在我的 pro 文件中添加 LIBS 行。
这里有一些可能有用的东西,qtcentre.org/threads/… 用户提供了一个示例,其中不仅使用 -L 设置路径,而且使用 -l 设置各个库名称,例如 LIBS += -Lpath -lname
为什么要投反对票?!?
@138 不指定文件名怎么办?它会查找路径中的所有文件吗?为什么会出现此错误?
【参考方案1】:
应用程序崩溃的原因是 Qt 和 matlab 使用不同版本的libstdc++6
。当不链接到 matlab 时,链接器正在加载标准库位置中的标准版本库。
但是,当添加LIBS += -L/opt/MATLAB/R2018a/sys/os/glnxa64
时,QtCreator 会将路径添加到LD_LIBRARY_PATH
环境变量中。现在链接器首先检查该目录并找到libstdc++6
并加载它。由于两个版本之间的二进制不兼容,应用程序在 Qt 代码的某处崩溃。
为了防止加载这个“错误”的库,可以将LD_PRELOAD
设置为系统libstdc++6
版本的环境变量,以便在加载实际应用程序之前加载这个库。
但是,这只是一种解决方法,很可能会导致 matlab 代码崩溃,因为现在使用的 libstdc++6
蜜蜂与 matlab 的需求不兼容。
唯一真正的想法是针对系统libstdc++6
从源代码编译 matlab 或从您的发行版存储库安装它。
注意:你应该适当地阅读README.libstdc++
- 我猜自述文件可以告诉你一个类似的故事
【讨论】:
以上是关于在 Linux 中将路径添加到 Qt Creator 中的库时出错的主要内容,如果未能解决你的问题,请参考以下文章
在 Eclipse 中将 .so lib 添加到 .pro 文件中。 C++/Eclipse/Linux