我正在执行一项任务,我们必须使用RPCgen生成的服务器和客户端.c文件来交换有关共享绘图板的信息。利用QtCreator和QtPainter实现了绘图板。
我遇到的问题是,在编译时,我会得到对xdr_int等xdr函数和在QtCreator中创建的与xdr相关的类文件中的函数的未定义引用的错误。我认为值得指出的是,客户机/服务器独立的代码在使用-ltirpc标志时运行良好。
我已经尝试过将-ltirpc标志直接添加到由.pro + qmake生成的makefile中,并且只在pro中添加。文件,然后通过QtCreator运行。下面的LineArea函数是未定义的引用之一,它创建客户机的第一行是对xdr函数clnt_create的引用。
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添加编译标志的最新尝试:
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如有任何帮助或建议,我们将不胜感激。
编辑:--这些是编译时的错误
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错误。
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发布于 2019-10-01 20:03:08
QMAKE_CXXFLAGS += -ltirpc添加编译器标志,编译器不关心库。假设库名称是正确的,并且在不添加-L库搜索路径的情况下找到,则应该可以这样做:
LIBS += -ltirrp https://stackoverflow.com/questions/58185137
复制相似问题