c++ - 静态库 - 使用自己的 Qt .so 文件的静态库

标签 c++ ubuntu qt4

我想为 Qt Project 版本 4.7.4 编译一个静态库。但无论我在 .pro 文件中进行什么更改,它都不会影响更改。我想更改例如 libQt5Gui.so 以指向 /opt/vendor/extlib/libQt5Gui.so,但我现在运气不好:

我正在将文件从 Ubuntu 复制到干净安装的 Xubuntu 13.04 上的虚拟机。

当我使用 ldd 命令时,它返回:

marin@host:~/some_dir/test$ ldd ./Project02
linux-gate.so.1 =>  (0xb76e7000)
libQt5Widgets.so.5 => /usr/lib/i386-linux-gnu/libQt5Widgets.so.5 (0xb70c6000)
libQt5Xml.so.5 => /usr/lib/i386-linux-gnu/libQt5Xml.so.5 (0xb708a000)
libQt5Gui.so.5 => not found
libQt5Core.so.5 => not found
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6fa0000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6f83000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6dd0000)
libQt5Gui.so.5 => not found
libQt5Core.so.5 => not found
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6db4000)
libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb6d64000)
libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb6c63000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb6b2c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6ae9000)
/lib/ld-linux.so.2 (0xb76e8000)
libQt5Core.so.5 => not found
libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xb6ae2000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb6aa1000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6a7e000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb6a79000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb6a75000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb6a6e000)

所以你,我不明白为什么是:

libQt5Gui.so.5 => not found
libQt5Core.so.5 => not found

我的 .pro 文件:

QT       += core gui xml

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Project02
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    editorplain.cpp \
    logssession.cpp \
    createcontroller.cpp \
    createmodel.cpp \
    createview.cpp \
    envview.cpp \
    properties.cpp \
    debugsettings.cpp \
    serverconf.cpp \
    frameworkview.cpp \
    helpergen.cpp \
    offlineserver.cpp \
    cssproperty.cpp \
    regex.cpp \
    formgen.cpp

HEADERS  += mainwindow.h \
    editorplain.h \
    logssession.h \
    createcontroller.h \
    createmodel.h \
    createview.h \
    envview.h \
    properties.h \
    debugsettings.h \
    serverconf.h \
    frameworkview.h \
    helpergen.h \
    offlineserver.h \
    cssproperty.h \
    regex.h \
    formgen.h

FORMS    += mainwindow.ui \
    editorplain.ui \
    logssession.ui \
    createcontroller.ui \
    createmodel.ui \
    createview.ui \
    envview.ui \
    properties.ui \
    debugsettings.ui \
    serverconf.ui \
    frameworkview.ui \
    helpergen.ui \
    offlineserver.ui \
    cssproperty.ui \
    regex.ui \
    formgen.ui

RESOURCES += \
    res.qrc

CONFIG += staticlib

LIBS += -L$$PWD/extstaticlibs/ -lFoobar
INCLUDEPATH += $$PWD/extstaticlibs

.pro 文件中我只添加了:

CONFIG += staticlib

LIBS += -L$$PWD/extstaticlibs/ -lFoobar
INCLUDEPATH += $$PWD/extstaticlibs

在 $$PWD/extstaticlibs 上有 libQt5Gui.so.5 的复制文件。

那么,必须使静态库在没有动态共享 .so Qt 脚本的情况下作为独立应用程序工作吗?谢谢!

最佳答案

我解决了这个问题。在 Windows 机器下使用 g++ --static --release 和 minigw 编译可以解决这个问题。由于对 Qt 库的更好支持,推荐的版本是使用 Qt 的共享库。

我也在 Unix 中解决了这个问题,使用 DEB 包并添加了一个共享库 libqt5guilibqt5core

对于静态库我还没有完全解决,所以我不推荐使用这个解决方案,因为在其他平台上的 gcc 版本和 c++ 编译器不兼容。它将防止搞砸编译代码。

关于c++ - 静态库 - 使用自己的 Qt .so 文件的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16340735/

相关文章:

c++ - Qt在ComboBox1的基础上改变ComboBox2

c++ - 具有独立主机环境的线程 (c++)

c++ - 从类模板派生类

c++ - 实现Matlab的冒号: operator in C++ expression templates class

c++ - Visual Studio 发布 - 查看 asm 一行

NVIDIA TV 上的 Ubuntu - CUDA 驱动程序版本对于 CUDA 运行时版本不足

php - 如何在 Ubuntu 14.04 上启用 php5 curl?

c++ - 如何使用QColumnView显示多列数据

bash - 从 MATLAB 调用 Anaconda 环境 : Conda Command Not Found

c++ - const QString& 的显式模板特化导致未解析的外部