Linux下Qt Creator添加库路径后运行出现段错误问题求助
解决Qt项目添加MATLAB系统库路径后运行段错误的问题
看起来你遇到的是典型的库版本冲突问题——你添加的MATLAB sys/os/glnxa64 路径里包含了很多系统级基础库(比如libstdc++.so.6、libgcc_s.so.1),这些库的版本大概率和Qt Creator或系统自带的库版本不兼容。编译时链接环节没问题,但运行时程序优先加载了MATLAB路径下的旧版/修改版库,直接引发了内存访问错误(Segmentation fault)。
下面是几个按优先级排序的可行解决方案:
1. 移除不必要的全局库路径(最推荐)
你完全不需要把MATLAB的系统库路径加到LIBS里。这个目录里的库都是Linux系统本身就自带的基础依赖,MATLAB自身会在运行时处理这些库的加载。你应该只链接实际需要的MATLAB业务库——比如位于/opt/MATLAB/R2018a/bin/glnxa64或/opt/MATLAB/R2018a/lib/glnxa64里的特定库,像libmat.so、libmx.so这类和MATLAB功能相关的库。
修改你的pro文件,把那条有问题的路径替换成精准的库链接,示例:
LIBS += -L/opt/MATLAB/R2018a/bin/glnxa64 -lmat -lmx
2. 调试定位冲突根源
如果不确定是哪个库导致的崩溃,可以用gdb快速定位:
- 在Qt Creator中直接点击"调试"按钮启动程序,触发段错误后,查看调用堆栈(Stack Trace),就能看到错误发生在哪个库的函数里。
- 或者在终端手动调试:
从输出的堆栈信息里,能明确看到是哪个库的代码引发了崩溃,再针对性解决。gdb ./你的项目可执行文件名 run bt
3. 调整运行时库加载顺序
如果确实必须保留这个MATLAB路径,那要确保系统自带的库优先被加载:
- 在Qt Creator的「项目」设置 →「运行」→「环境变量」里,添加或修改
LD_LIBRARY_PATH,把系统库路径(比如/usr/lib/x86_64-linux-gnu)放在MATLAB路径前面:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/opt/MATLAB/R2018a/sys/os/glnxa64:$LD_LIBRARY_PATH - 或者在终端运行程序时,临时指定优先加载系统的核心库:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./你的项目可执行文件名
4. 检查Qt的编译环境配置
确认Qt Creator使用的是系统自带的编译器/库,还是Qt自带的版本。可以在Qt Creator的「工具」→「选项」→「构建和运行」里查看编译器和Qt版本的配置,确保编译环境没有和MATLAB的库环境产生交叉冲突。
内容的提问来源于stack exchange,提问作者NESHOM




