查看完整版本: [-- 交叉编译遇到的问题。 --]

QTCN开发网 -> 《Qt高级编程》专栏 -> 交叉编译遇到的问题。 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

blancyang 2017-04-17 20:35

交叉编译遇到的问题。

我于ubuntu14将qt4.8的程序升级至qt5.6.2.
程序主要分为两部分,qt写的demo,demo依赖的库(C语言写的,不开源)。
目前去掉链接库,demo可以正常编译。但是链接上.so的库,报出以下错误,如下:

/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QWidget::x11Event(_XEvent*)'/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QWidget::enabledChange(bool)'
/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QWidget::languageChange()'/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QString::free(QString::Data*)'
/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QObject::disconnectNotify(char const*)'/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QWidget::windowActivationChange(bool)'
/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QHeaderView::dataChanged(QModelIndex const&, QModelIndex const&)'/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QWidget::styleChange(QStyle&)'
/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QHeaderView::setClickable(bool)'/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QObject::connectNotify(char const*)'
/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QMetaObject::tr(char const*, char const*) const'/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QWidget::fontChange(QFont const&)'
/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QVariant::handler'/home/vdoo/vdoo/lib/libVidyoClientDll.so: undefined reference to `QWidget::paletteChange(QPalette const&)'
对libVidyoClientDll.so执行ldd命令,结果如下
    linux-vdso.so.1 =>  (0x00007ffea0136000)    libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007fa14b29c000)
    libanl.so.1 => /lib/x86_64-linux-gnu/libanl.so.1 (0x00007fa14b098000)    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa14ae90000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa14ac8b000)    libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007fa14a99b000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa14a697000)    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa14a390000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa149fcb000)    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa149db5000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa149b96000)    /lib64/ld-linux-x86-64.so.2 (0x000055b1b8b30000)
libVidyoClientDll.so不开源,在qt4.8上编译正常,不知道为什么会出现这个原因。请各位大神帮帮忙。

uidab 2017-04-18 08:24
QWidget::x11Event ----->   这个好像在5.6里面没有了
languageChange   这个也是
其他的你自己看看

blancyang 2017-04-18 11:15
uidab:QWidget::x11Event ----->   这个好像在5.6里面没有了
languageChange   这个也是
其他的你自己看看 (2017-04-18 08:24) 

嗯,我也刚查了。那我Qt5的编译环境,怎么会出现这个情况呢,链接库是用C写的并不依赖于QT呀。该怎么解决这个问题呢。

uidab 2017-04-18 11:30
blancyang:嗯,我也刚查了。那我Qt5的编译环境,怎么会出现这个情况呢,链接库是用C写的并不依赖于QT呀。该怎么解决这个问题呢。 (2017-04-18 11:15) 

那这个要先看源码是什么样子的,其他的我暂时也想不到。

uidab 2017-04-18 11:31
blancyang:嗯,我也刚查了。那我Qt5的编译环境,怎么会出现这个情况呢,链接库是用C写的并不依赖于QT呀。该怎么解决这个问题呢。 (2017-04-18 11:15) 

你pro里是怎么写的?

blancyang 2017-04-18 11:37
uidab:那这个要先看源码是什么样子的,其他的我暂时也想不到。 (2017-04-18 11:30) 

库文件不开源

blancyang 2017-04-18 11:38
uidab:你pro里是怎么写的? (2017-04-18 11:31) 

nclude ($$(VDOO)/src/vdoo.pri)
QT       += core gui widgets

TARGET = QtVidyoSample
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    vsroomlink.cpp \
    VsPlugin.cpp \
    VsStatus.cpp

HEADERS  += mainwindow.h \
    vsroomlink.h \
    VsPlugin.h \
    VsStatus.h

FORMS    += mainwindow.ui \
    vsroomlink.ui

INCLUDEPATH +=    VidyoClient/include

macx {
    DEFINES +=Q_WS_MAC
        QMAKE_INFO_PLIST = resources/macx/info.plist

}

win32 {
       DEFINES +=Q_WS_WIN
       RC_FILE = resources/win32/win32.rc
}


MOC_DIR     = $$VDOO_OBJ_PATH/QtVidyoSample/.moc        
UI_DIR        = $$VDOO_OBJ_PATH/QtVidyoSample/.ui
OBJECTS_DIR    = $$VDOO_OBJ_PATH/QtVidyoSample/
DESTDIR        = $$VDOO_BIN_PATH

unix {
        macx {
            LIBS += \
            ../QtVidyoSample/VidyoClient/lib/mac/VidyoClientDll.dylib

        } else {
        LIBS += \
        $$VDOO_LIB_PATH/libVidyoClientDll.so\
        -LVidyoClient/lib\
        -lblkid\
        -lXrandr\
        -lanl\
        -lpthread\
        -lGL -lGLU -lX11\
        -lrt
        }
}
win32 {
    
        LIBS += $$VDOO_LIB_PATH/VidyoClientDll.lib
}


uidab 2017-04-18 18:07
blancyang:nclude ($$(VDOO)/src/vdoo.pri)
QT       += core gui widgets
TARGET = QtVidyoSample
....... (2017-04-18 11:38) 

你可以写一个非常简单的程序,只是把这个库链接进来,然后看看。
比如建一个控制台的程序或者建一个空的Qwidget(或Qmainwindow)


查看完整版本: [-- 交叉编译遇到的问题。 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled