如何解决Qt - 找不到“QCoreApplication”值的虚拟表的链接器符号 - hello world 程序中的错误
我无法运行简单的 hello world 程序,遇到错误消息:
can't find linker symbol for virtual table for `QCoreApplication' value
我要补充一点,这感觉就像我需要从头开始重新安装所有东西的情况,但我很犹豫要不要这样做,因为我遵循了很长的详细说明来设置 Qt 以交叉编译嵌入式板。如果我能找出问题所在并继续进行,我将能够在我的嵌入式环境中继续工作。
这是来源:
main.cpp
#include <QCoreApplication>
#include <iostream>
int main(int argc,char *argv[])
{
QCoreApplication a(argc,argv);
std::cout << "Hello World!";
return a.exec();
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(demo2 LANGUAGES CXX)
# Probably want to comment this out once we are not debugging the build.
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_required ON)
find_package(Qt5 required COMPONENTS Core )
message("\n\n********** Qt5Core_DIR ${Qt5Core_DIR}\n\n")
message("\n\n********** CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}\n\n")
# Not your situation,but in case you have a different linker
# set(CMAKE_EXE_LINKER_FLAGS "-Wl,--verbose")
# Clang passes flags through to the linker (likely ld) by
# set(CMAKE_EXE_LINKER_FLAGS "-Xlinker -v")
# Clang passing flags to the linker (likely ld) AND using -v itself to show how it calls the linker
set(CMAKE_EXE_LINKER_FLAGS "-Xlinker -v -v")
message("\n\n********** CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}\n\n")
#-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
add_executable(demo2
main.cpp
)
target_link_libraries(demo2 Qt5::Core )
我想知道是否存在多个/不匹配的 libQt5Core 库文件的问题。这是一些图书馆信息:
ldd demo2
linux-vdso.so.1 (0x00007ffe802d2000)
libQt5Core.so.5 => /home/dan/Qt/5.12.3/gcc_64/lib/libQt5Core.so.5 (0x00007f6cfbbd9000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6cfb850000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6cfb638000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6cfb247000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6cfb028000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f6cfae0b000)
libicui18n.so.56 => /home/dan/Qt/5.12.3/gcc_64/lib/libicui18n.so.56 (0x00007f6cfa972000)
libicuuc.so.56 => /home/dan/Qt/5.12.3/gcc_64/lib/libicuuc.so.56 (0x00007f6cfa5ba000)
libicudata.so.56 => /home/dan/Qt/5.12.3/gcc_64/lib/libicudata.so.56 (0x00007f6cf8bd7000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6cf89d3000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f6cf87d1000)
libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f6cf84ba000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6cf811c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6cfc56f000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f6cf7eaa000)
ldconfig -p | grep libQt5Core
libQt5Core.so.5 (libc6,x86-64,OS ABI: Linux 2.6.28) => /home/dan/Qt/5.12.3/gcc_64/lib/libQt5Core.so.5
libQt5Core.so.5 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
libQt5Core.so (libc6,OS ABI: Linux 2.6.28) => /home/dan/Qt/5.12.3/gcc_64/lib/libQt5Core.so
Cmake 输出:
Running /home/dan/Qt/Tools/CMake/bin/cmake -S /home/dan/records/projects/qt_learning/first_demo/demo2/demo2 -B /home/dan/records/projects/qt_learning/first_demo/demo2/build-demo2-Desktop_Qt_5_12_3_GCC_64bit-Debug in /home/dan/records/projects/qt_learning/first_demo/demo2/build-demo2-Desktop_Qt_5_12_3_GCC_64bit-Debug.
-- Configuring done
********** Qt5Core_DIR /home/dan/Qt/5.12.3/gcc_64/lib/cmake/Qt5Core
********** CMAKE_EXE_LINKER_FLAGS
********** CMAKE_EXE_LINKER_FLAGS -Xlinker -v -v
-- Generating done
-- Build files have been written to: /home/dan/records/projects/qt_learning/first_demo/demo2/build-demo2-Desktop_Qt_5_12_3_GCC_64bit-Debug
Elapsed time: 00:00.
编译器输出:
13:36:35: Running steps for project demo2...
13:36:35: Starting: "/home/dan/Qt/Tools/CMake/bin/cmake" --build . --target all
[1/4 24.5/sec] Automatic MOC and UIC for target demo2
[2/4 26.0/sec] Building CXX object CMakeFiles/demo2.dir/demo2_autogen/mocs_compilation.cpp.o
[3/4 2.5/sec] Building CXX object CMakeFiles/demo2.dir/main.cpp.o
[4/4 2.8/sec] Linking CXX executable demo2
Using built-in specs.
COLLECT_GCC=/usr/bin/g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-g' '-v' '-o' 'demo2' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccNlMLa9.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z Now -z relro -o demo2 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. -v CMakeFiles/demo2.dir/demo2_autogen/mocs_compilation.cpp.o CMakeFiles/demo2.dir/main.cpp.o -rpath /home/dan/Qt/5.12.3/gcc_64/lib /home/dan/Qt/5.12.3/gcc_64/lib/libQt5Core.so.5.12.3 -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o
collect2 version 7.5.0
/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccNlMLa9.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z Now -z relro -o demo2 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. -v CMakeFiles/demo2.dir/demo2_autogen/mocs_compilation.cpp.o CMakeFiles/demo2.dir/main.cpp.o -rpath /home/dan/Qt/5.12.3/gcc_64/lib /home/dan/Qt/5.12.3/gcc_64/lib/libQt5Core.so.5.12.3 -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o
GNU ld (GNU Binutils for Ubuntu) 2.30
COLLECT_GCC_OPTIONS='-g' '-v' '-o' 'demo2' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
13:36:36: The process "/home/dan/Qt/Tools/CMake/bin/cmake" exited normally.
13:36:36: Elapsed time: 00:01.
如有任何帮助,我们将不胜感激。
解决方法
您可以在 message("Qt5Core_DIR ${Qt5Core_DIR}")
之后将 CMakeLists.txt
添加到 find_package
以检查 find_package
是否在 /home/dan
中找到 Qt(不确定是否应该 - 您可能需要添加 PATHS 参数以帮助 find_package)。或在 CMakeCache.txt
中检查此值。
您也可以将 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
添加到 cmake 参数以启用详细构建以检查链接器的作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。