提问人:yaa 提问时间:9/17/2017 最后编辑:valianoyaa 更新时间:10/23/2017 访问量:755
编译:Qt项目的未定义引用“clock_gettime和memcpy”
Compiling: undefined reference "clock_gettime and memcpy" for Qt project
问:
我尝试使用 CentOS 编译 Qt 项目。这个问题详细描述了我做了什么,并且 我想参考这个来使用另一个 glibc 库 /users/my/lib64/(我无法更新 /lib64/)。
这是编译输出:
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
.pro 文件:
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
如何解决?
答:
0赞
Employed Russian
9/18/2017
#1
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/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...
我上面缩进的两行应该是与原始成功链接命令相比的唯一更改。
评论
.pro