• 4562阅读
  • 7回复

[提问]交叉编译遇到的问题。 [复制链接]

上一主题 下一主题
离线blancyang
 

只看楼主 倒序阅读 楼主  发表于: 2017-04-17
我于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上编译正常,不知道为什么会出现这个原因。请各位大神帮帮忙。
本帖提到的人: @dbzhang800 @jnny_cn
离线uidab

只看该作者 1楼 发表于: 2017-04-18
QWidget::x11Event ----->   这个好像在5.6里面没有了
languageChange   这个也是
其他的你自己看看
4条评分好评度+1贡献值+1金钱+3威望+1
blancyang 好评度 +1 - 2017-04-18
blancyang 贡献值 +1 - 2017-04-18
blancyang 威望 +1 - 2017-04-18
blancyang 金钱 +3 - 2017-04-18
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线blancyang

只看该作者 2楼 发表于: 2017-04-18
回 uidab 的帖子
uidab:QWidget::x11Event ----->   这个好像在5.6里面没有了
languageChange   这个也是
其他的你自己看看 (2017-04-18 08:24) 

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

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

那这个要先看源码是什么样子的,其他的我暂时也想不到。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线uidab

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

你pro里是怎么写的?
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线blancyang

只看该作者 5楼 发表于: 2017-04-18
回 uidab 的帖子
uidab:那这个要先看源码是什么样子的,其他的我暂时也想不到。 (2017-04-18 11:30) 

库文件不开源
离线blancyang

只看该作者 6楼 发表于: 2017-04-18
回 uidab 的帖子
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

只看该作者 7楼 发表于: 2017-04-18
回 blancyang 的帖子
blancyang:nclude ($$(VDOO)/src/vdoo.pri)
QT       += core gui widgets
TARGET = QtVidyoSample
....... (2017-04-18 11:38) 

你可以写一个非常简单的程序,只是把这个库链接进来,然后看看。
比如建一个控制台的程序或者建一个空的Qwidget(或Qmainwindow)
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
快速回复
限100 字节
 
上一个 下一个