微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Qt - 找不到“QCoreApplication”值的虚拟表的链接器符号 - hello world 程序中的错误

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?