我想为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脚本的情况下作为独立应用程序运行吗?谢谢!
答案 0 :(得分:1)
我解决了这个问题。使用g++ --static --release
并在Windows机器下使用minigw进行编译将解决此问题。推荐的版本是使用Qt的共享库,因为它可以更好地支持Qt库。
我也在Unix中解决了这个问题,使用了DEB包并添加了一个共享库libqt5gui
和libqt5core
。
对于静态库我还没有完全解决,因此我不推荐使用此解决方案,因为在其他平台上存在不兼容的gcc
版本和c ++编译器。它可以防止搞砸编译代码。