首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Qt类编译rpcgen文件?

如何用Qt类编译rpcgen文件?
EN

Stack Overflow用户
提问于 2019-10-01 12:50:22
回答 1查看 560关注 0票数 2

我正在执行一项任务,我们必须使用RPCgen生成的服务器和客户端.c文件来交换有关共享绘图板的信息。利用QtCreator和QtPainter实现了绘图板。

我遇到的问题是,在编译时,我会得到对xdr_int等xdr函数和在QtCreator中创建的与xdr相关的类文件中的函数的未定义引用的错误。我认为值得指出的是,客户机/服务器独立的代码在使用-ltirpc标志时运行良好。

我已经尝试过将-ltirpc标志直接添加到由.pro + qmake生成的makefile中,并且只在pro中添加。文件,然后通过QtCreator运行。下面的LineArea函数是未定义的引用之一,它创建客户机的第一行是对xdr函数clnt_create的引用。

代码语言:javascript
复制
LineArea::LineArea(char *hostname, QWidget *parent) : QWidget(parent)
{
    clnt = clnt_create(hostname, WHITEBOARD_PROG, WHITEBOARD_VERSION, "udp");
    if (clnt)
    {
        clnt_info = register_client_1(clnt_info, clnt);
        setAttribute(Qt::WA_StaticContents);
        press_start = false;
        pen_width = 2;
        pen_color = QColor(clnt_info->r, clnt_info->g, clnt_info->b);
        board = QImage(500, 500, QImage::Format_RGB32);
        board.fill(qRgb(255, 255, 255));
        board_real = board;
        update();
    }
}

下面是向qmake/..pro添加编译标志的最新尝试:

代码语言:javascript
复制
CONFIG += c++11

SOURCES += \
        LineArea.cpp \
        main.cpp \
        mainwindow.cpp \
        whiteboard_clnt.c \
        whiteboard_xdr.c

HEADERS += \
        LineArea.h \
        mainwindow.h \
        whiteboard.h

FORMS += \
        mainwindow.ui
#EXTRA FLAGS
QMAKE_CXXFLAGS += -ltirpc

如有任何帮助或建议,我们将不胜感激。

编辑:--这些是编译时的错误

代码语言:javascript
复制
g++ -Wl,-O1 -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o whiteboard LineArea.o main.o mainwindow.o moc_LineArea.o moc_mainwindow.o whiteboard_clnt.c whiteboard_xdr.c whiteboard.h   /usr/lib/libQt5Widgets.so /usr/lib/libQt5Gui.so /usr/lib/libQt5Core.so /usr/lib/libGL.so -lpthread   
/usr/bin/ld: LineArea.o: in function `LineArea::LineArea(char*, QWidget*)':
LineArea.cpp:(.text+0xa6f): undefined reference to `clnt_create'
/usr/bin/ld: /tmp/ccdM1OwC.o: in function `send_line_1':
whiteboard_clnt.c:(.text+0x43): undefined reference to `xdr_int'
/usr/bin/ld: /tmp/ccdM1OwC.o: in function `remove_client_1':
whiteboard_clnt.c:(.text+0x1cf): undefined reference to `xdr_int'
/usr/bin/ld: /tmp/cccxQLHU.o: in function `xdr_operands':
whiteboard_xdr.c:(.text+0x54): undefined reference to `xdr_int'
/usr/bin/ld: whiteboard_xdr.c:(.text+0x7e): undefined reference to `xdr_int'
/usr/bin/ld: whiteboard_xdr.c:(.text+0xa8): undefined reference to `xdr_int'
/usr/bin/ld: /tmp/cccxQLHU.o:whiteboard_xdr.c:(.text+0xd2): more undefined references to `xdr_int' follow
collect2: error: ld returned 1 exit status
make: *** [Makefile:410: whiteboard] Error 1

我正在手动运行make,我已经将whiteboard_clnt.c whiteboard_xdr.c和whiteboard.h添加到makefile的菜谱中。当它们没有出现相同的错误时,除了xdr错误。

代码语言:javascript
复制
g++ -Wl,-O1 -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o whiteboard LineArea.o main.o mainwindow.o moc_LineArea.o moc_mainwindow.o   /usr/lib/libQt5Widgets.so /usr/lib/libQt5Gui.so /usr/lib/libQt5Core.so /usr/lib/libGL.so -lpthread   
/usr/bin/ld: LineArea.o: in function `LineArea::recvLines()':
LineArea.cpp:(.text+0x70): undefined reference to `consult_line_1'
/usr/bin/ld: LineArea.o: in function `LineArea::drawLineTo(QPoint const&)':
LineArea.cpp:(.text+0x7a0): undefined reference to `send_line_1'
/usr/bin/ld: LineArea.o: in function `LineArea::LineArea(char*, QWidget*)':
LineArea.cpp:(.text+0xa6f): undefined reference to `clnt_create'
/usr/bin/ld: LineArea.cpp:(.text+0xa86): undefined reference to `register_client_1'
collect2: error: ld returned 1 exit status
make: *** [Makefile:410: whiteboard] Error 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-01 20:03:08

QMAKE_CXXFLAGS += -ltirpc添加编译器标志,编译器不关心库。假设库名称是正确的,并且在不添加-L库搜索路径的情况下找到,则应该可以这样做:

代码语言:javascript
复制
LIBS += -ltirrp 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58185137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档