无法在 Linux 上打开 QLibrary

Can't open QLibrary on linux

本文关键字:QLibrary Linux      更新时间:2023-10-16

当我尝试加载存储在与二进制文件相同的目录中的特定库时,出现错误:

无法加载库 uuirtdrv.so:(uuirtdrv.so:无法打开共享 目标文件:没有这样的文件或目录(

但仅限于Linux,而不是Windows。在窗户上,它就像一个魅力。

祁祁

QT += core serialport
QT -= gui
CONFIG += c++11
TARGET = serial-test
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
win32 {
    dll.files += $$PWD/uuirtdrv.dll
    dll.path = $$OUT_PWD
    INSTALLS += dll
 }
unix {
    so.files += $$PWD/uuirtdrv.so
    so.path = $$OUT_PWD
    INSTALLS += so
 }

QMake 将库复制到目标目录。

主.cpp

if (!QLibrary::isLibrary("uuirtdrv.so"))
{
    qDebug() << "uuirtdrv does not exist.";
}
qDebug() << "Loading uuirtdrv";
QLibrary hinstLib;
hinstLib.setFileName("uuirtdrv.so");
if (hinstLib.load()) qDebug() << "uuirtdrv loaded.";
else qDebug() << hinstLib.errorString();

main.cpp所做的只是检查库是否存在,然后尝试加载它。不知道这里可能出了什么问题。我需要将 .so 放入特定目录吗?(文档提到了 Linux 上的LD_LIBRARY_PATH。

编辑:当我添加绝对路径而不是相对路径时,会发生此错误:

无法加载库/media/sf_Qt/build-serial-test-Desktop-Debug/uuirtdrv.so:(libstdc++.so.5:无法打开共享对象文件:没有这样的文件或目录(">

libstdc++.so.5:无法打开共享对象文件:没有这样的文件或 目录

请安装 libstdc++5 : Fedora, CentOS → # yum install compat-libstdc++-33

新 Fedora : # dnf install compat-libstdc++-33

Debian, Ubuntu : apt-get install libstdc++5