在Linux中的Qt Creator中将路径添加到库时出错

时间:2018-04-07 04:22:35

标签: linux qt shared-libraries qt-creator

如果我在Linux中的Qt Creator 4.6.0中创建一个新的Qt Widget应用程序,并将以下行添加到专业文件中:

LIBS += -L/opt/MATLAB/R2018a/sys/os/glnxa64

它编译没有任何问题,但它没有运行。它显示了此分段错误错误:

enter image description here

以下是/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++

为什么会发生这种情况?如何解决?

1 个答案:

答案 0 :(得分: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++ - 我猜它自述可以告诉您类似的故事