Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android应用程序中使用Qt代码 我在Android工作室有Android应用程序,我想在我的应用程序中使用QT C++代码。我最近在Calgand NDK中使用了纯C++代码,我可以和纯C++交互,现在我想使用QT C++代码。_Android_C++_Qt_Cmake_Android Ndk - Fatal编程技术网

在Android应用程序中使用Qt代码 我在Android工作室有Android应用程序,我想在我的应用程序中使用QT C++代码。我最近在Calgand NDK中使用了纯C++代码,我可以和纯C++交互,现在我想使用QT C++代码。

在Android应用程序中使用Qt代码 我在Android工作室有Android应用程序,我想在我的应用程序中使用QT C++代码。我最近在Calgand NDK中使用了纯C++代码,我可以和纯C++交互,现在我想使用QT C++代码。,android,c++,qt,cmake,android-ndk,Android,C++,Qt,Cmake,Android Ndk,为此,我安装了具有Android功能的Qt。之后,我将Qt5.12.7/5.12.7/android_arm64_v8a/lib/*.so和includes文件复制到我的android App/etc/文件夹,并创建了一个简单的main.cpp和CMakeLists.txt文件,如下所示: main.cpp #include <QString> #include <QDebug> int main(int argc, char *argv[]) { QString

为此,我安装了具有Android功能的Qt。之后,我将Qt5.12.7/5.12.7/android_arm64_v8a/lib/*.so和includes文件复制到我的android App/etc/文件夹,并创建了一个简单的main.cpp和CMakeLists.txt文件,如下所示:

main.cpp

#include <QString>
#include <QDebug>
int main(int argc, char *argv[])
{
    QString test="HELLO WORLD!";
    qDebug()<<test;
    return 0;
}

以上文件中所见,我想编译一个依赖于LIbqtCor的简单Qt C++代码。因此在我的Android应用程序中,但是在编译应用程序之后,出现以下错误:

Build command failed.
Error while executing process C:\Users\User1\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\ninja.exe with arguments {-C D:\WorkProjects\Horizon\Ga\po\.cxx\cmake\debug\armeabi-v7a po-lib}
ninja: Entering directory `D:\WorkProjects\Horizon\Ga\po\.cxx\cmake\debug\armeabi-v7a'
[1/2] Building CXX object CMakeFiles/po-lib.dir/main.cpp.o
[2/2] Linking CXX shared library D:\WorkProjects\Horizon\Ga\po\build\intermediates\cmake\debug\obj\armeabi-v7a\libpo-lib.so
FAILED: D:/WorkProjects/Horizon/Ga/po/build/intermediates/cmake/debug/obj/armeabi-v7a/libpo-lib.so 
cmd.exe /C "cd . && C:\Users\User1\AppData\Local\Android\Sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi21 --gcc-toolchain=C:/Users/User1/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/User1/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security   -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libpo-lib.so -o D:\WorkProjects\Horizon\Ga\po\build\intermediates\cmake\debug\obj\armeabi-v7a\libpo-lib.so CMakeFiles/po-lib.dir/main.cpp.o -LD:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/libs_a  -LD:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/libs_so -lQt5Core -latomic -lm && cd ."
C:/Users/User1/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: warning: skipping incompatible D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/libs_so/libQt5Core.so while searching for Qt5Core
C:/Users/User1/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: error: cannot find -lQt5Core
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/main.cpp:25: error: undefined reference to 'QMessageLogger::debug() const'
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/main.cpp:25: error: undefined reference to 'QDebug::~QDebug()'
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/main.cpp:25: error: undefined reference to 'QDebug::~QDebug()'
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/headerFile\QtCore/qstring.h:700: error: undefined reference to 'QString::fromAscii_helper(char const*, int)'
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/headerFile\QtCore/qdebug.h:155: error: undefined reference to 'QDebug::putString(QChar const*, unsigned int)'
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/headerFile\QtCore/qdebug.h:125: error: undefined reference to 'QTextStream::operator<<(char)'
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/headerFile\QtCore/qarraydata.h:59: error: undefined reference to 'qt_assert(char const*, char const*, int)'
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/headerFile\QtCore/qarraydata.h:239: error: undefined reference to 'QArrayData::deallocate(QArrayData*, unsigned int, unsigned int)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
Build命令失败。
执行进程C:\Users\User1\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\ninja.exe时出错,参数为{-C D:\WorkProjects\Horizon\Ga\po\.cxx\cmake\debug\armeabi-v7a po lib}
忍者:进入目录'D:\WorkProjects\Horizon\Ga\po\.cxx\cmake\debug\armeabi-v7a'
[1/2]构建CXX对象CMakeFiles/po lib.dir/main.cpp.o
[2/2]链接CXX共享库D:\WorkProjects\Horizon\Ga\po\build\mediates\cmake\debug\obj\armeabi-v7a\libpo-lib.so
失败:D:/WorkProjects/Horizon/Ga/po/build/intermediates/cmake/debug/obj/armeabi-v7a/libpo-lib.so
cmd.exe/C"光碟,C:\Users\User1\AppData\Local\Android\Sdk\ndk\21.0.6113669\toolschains\llvm\prebuilded\windows-x86\u 64\bin\clang++.exe--target=armv7-none-linux-androideabi21--gcc-toolschain=C:/Users/User1/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolschains/llvm/prebuild/windows-x86\u 64--sysroot=C:/Users/User1/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolschains/llvm/prebuild/windows-x86_64/sysroot-fPIC-g-DANDROID-fdata-sections-ffunction-sections-funwind-tables-fstack-protector-strong-无规范前缀-D\u-FORTIFY\u SOURCE=2-march=armv7-a-mthumb-Wformat-Werror=格式安全性-O0-fno-limit调试信息-Wl,--exclude libs,libgcc_real.a-Wl,-exclude libs,libatomic.a-静态libstdc++-Wl,-build id-Wl,-致命警告-Wl,-exclude libs,libunwind.a-Wl,-无未定义-使用的参数-shared-Wl,-soname,libpo-lib.so-od:\WorkProjects\Horizon\Ga\po\build\intermediates\cmake\debug\obj\armeabi-v7a\libpo-lib.so-CMakeFiles/po-lib.dir/main.cpp.o-LD:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/libs\u a-LD:/WorkProjects/Ga/po/src/main/cpp/etc/libs\u-so-lQt5Core-latomic-lm&&cd。”
C:/Users/User1/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolschains/llvm/prebuild/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../../../../../arm linux-androideabi/bin\ld:警告:搜索Qt5Core时跳过不兼容的D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc libs\so/libQt5Core.so
C:/Users/User1/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolschains/llvm/prebuild/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../../arm linux-androideabi/bin\ld:错误:找不到-lQt5Core
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/main.cpp:25:错误:未定义对“QMessageLogger::debug()const”的引用
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/main.cpp:25:错误:未定义对“QDebug::~QDebug()的引用”
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/main.cpp:25:错误:未定义对“QDebug::~QDebug()的引用”
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/headerFile\QtCore/qstring.h:700:错误:未定义对“qstring::fromscii_helper(char const*,int)”的引用
D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/headerFile\QtCore/qdebug.h:155:错误:未定义对“qdebug::putString(QChar const*,unsigned int)”的引用

D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/headerFile\QtCore/qdebug.h:125:错误:未定义对“QTextStream::operator”的引用您的Qt库与您正在构建的二进制文件没有相同的ABI(
armeabi-v7a
)。这甚至可以在错误消息中看到:

/../../arm-linux-androideabi/bin\ld: warning: skipping incompatible D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/libs_so/libQt5Core.so while searching for Qt5Core
要正确运行它,请安装
armeabi-v7a
版本的Qt并让cmake找到它,而不是
arm64-v8a
(硬编码路径是一种临时方法)


如果您使用NDK的cmake工具链进行编译,您可以在通过
-DANDROID\u ABI=arm64-v8a
进行配置时,将
ANDROID\u ABI
变量传递给cmake。您的Qt库没有与正在构建的二进制文件相同的ABI(
armeabi-v7a
)。这甚至可以在错误消息中看到:

/../../arm-linux-androideabi/bin\ld: warning: skipping incompatible D:/WorkProjects/Horizon/Ga/po/src/main/cpp/etc/libs_so/libQt5Core.so while searching for Qt5Core
要正确运行它,请安装
armeabi-v7a
版本的Qt并让cmake找到它,而不是
arm64-v8a
(硬编码路径是一种临时方法)


如果您使用NDK的cmake工具链进行编译,您可以在通过
-DANDROID\u ABI=arm64-v8a
进行配置时将
ANDROID\u ABI
变量传递给cmake。我也有同样的问题。如何在我的ANDROID Studio中设置
-DANDROID\u NDK=arm64-v8a
将它添加到cmake中。例如,
cmake$SRC-DANDROID\u NDK=arm64-v8a-DCMAKE\u TOOLCHAIN\u FILE=$TOOLCHAIN
Thx,但我使用Android Studio来编译它。有没有办法把这个参数放在CmakeList中?@abolfazldiyan对不起,我的错了,变量名是
Android\u ABI
。是的,你可以使用
set(Android\u ABI“arm64-v8a”)
设置变量。我也遇到了同样的问题。如何在我的Android Studio中设置
-DANDROID\u NDK=arm64-v8a
?@abolfazldiyant如果您是从命令行编译,在配置时可以将其添加到cmake。例如,
cmake$SRC-DANDROID\u NDK=arm64-v8a-DCMAKE\u工具链文件=$toolschain
Thx,但我使用Android Studio编译它。有没有办法把这个参数放到CmakeList中?@AbolfazlDiyanat对不起,我的错,变量名是
ANDROID\u ABI
。是的,你可以使用
set(ANDROID\u ABI“arm64-v8a”)
来设置变量。