gpt4 book ai didi

qt - 编译: undefined reference "clock_gettime and memcpy" for Qt project

转载 作者:行者123 更新时间:2023-12-04 19:43:11 25 4
gpt4 key购买 nike

我尝试用 CentOS 编译 Qt 项目。
This问题详细描述了我所做的事情和
我想用另一个 glibc 库 /users/my/lib64/ (我无法更新/lib64/)引用this .

这是编译输出:

g++ ./main.o ./moc_widget.o ./widget.o \
-o ./test -Wl,--rpath=/users/my/lib64 \
-Wl,--rpath=/users/my/Qt/5.9.1/gcc_64/lib \
-Wl,--dynamic-linker=/users/my/lib64/libc.so.6 \
-Wl,--dynamic-linker=/users/my/lib64/libz.so.1 \
-L/users/my/Qt/5.9.1/gcc_64/lib -lQt5Widgets \
-lQt5Gui -lQt5Core -lGL -lpthread -lglib-2.0 -lrt -lX11 \
-I/users/my/test/2 \
-I/users/my/Qt/5.9.1/gcc_64/include \
-I/users/my/Qt/5.9.1/gcc_64/include/QtWidgets \
-I/users/my/Qt/5.9.1/gcc_64/include/QtCore \
-I/users/my/Qt/5.9.1/gcc_64/include/QtGui

。轮廓 :
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS

CONFIG += qt

SOURCES += \
main.cpp \
widget.cpp

HEADERS += \
widget.h

FORMS += \
widget.ui

gcc 版本:6.1.0

但是错误:
    /users/my/Qt/5.9.1/gcc_64/lib/libQt5Core.so: undefined reference to `clock_gettime@GLIBC_2.17'
/users/my/Qt/5.9.1/gcc_64/lib/libQt5Widgets.so: undefined reference to `memcpy@GLIBC_2.14'
collect2 ld returned exit 1 status

如何解决?

最佳答案

g++ ./main.o ./moc_widget.o ./widget.o \
-o ./test -Wl,--rpath=/users/my/lib64 \
-Wl,--rpath=/users/my/Qt/5.9.1/gcc_64/lib \
-Wl,--dynamic-linker=/users/my/lib64/libc.so.6 \
-Wl,--dynamic-linker=/users/my/lib64/libz.so.1 \
-L/users/my/Qt/5.9.1/gcc_64/lib -lQt5Widgets \
-lQt5Gui -lQt5Core -lGL -lpthread -lglib-2.0 -lrt -lX11 \
-I...

这个命令行完全是假的(你没看懂 previous answer ):动态链接器只能有一个,应该是 /users/my/lib64/ld-linux-x86-64.so.2 , 而不是 libz.so.1 .通过使用多个 --dynamic-linker=...标志,您只是用新的(也不正确的)设置替换以前的(不正确的)设置。

这也是虚假的,因为指定 -I...没有任何来源的链接行上的标志是没有意义的。

如果此命令成功,您将得到一个会立即崩溃的可执行文件,因为 libz.so.1不是动态链接器。

现在,您的链接失败,因为您在错误的系统上执行链接。您需要链接到原始系统(您之前成功链接二进制文件的系统,以及具有 GLIBC 2.17 或更高版本的系统)。然后将链接的可执行文件移动到您的目标系统。

在原始系统上,您的链接命令应如下所示:
g++ main.o moc_widget.o widget.o -o test \
-Wl,-rpath=/users/my/lib64 \
-Wl,--dynamic-linker=/users/my/lib64/ld-linux-x86-64.so.2 \
-L...

我在上面缩进的两行应该是您最初成功的链接命令的唯一变化。

关于qt - 编译: undefined reference "clock_gettime and memcpy" for Qt project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46261789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com