gpt4 book ai didi

android - Cmake 测试被忽略 - 在 android 中使用 gradle 构建 cmake 项目

转载 作者:行者123 更新时间:2023-11-28 04:42:28 27 4
gpt4 key购买 nike

我正在尝试整合 https://github.com/j0r1/JRTPLIB进入 Gradle 。自述文件中已经有关于如何编译库以在 Android 上安装的教程,但我需要 gradle 集成。

以下是我将项目添加到我的 gradle 文件的方式:

https://github.com/lucaszanella/jscam/blob/ecc99f430b360f7e1aa5bf687633a5e3557c045e/src/jscam/android/app/build.gradle#L118

我收到一个编译错误,因为我的系统库不支持 ifaddrs。但是,该项目的 cmakelists 对此进行了测试:

jrtplib_include_test(ifaddrs.h RTP_SUPPORT_IFADDRS "// No ifaddrs support")

那么,为什么 gradle 会尝试构建未通过测试的东西?

这是编译我的应用程序时的错误:

Error while executing '/android-sdk-linux/cmake/3.6.4111459/bin/cmake' with arguments {--build /home/project/src/jscam/android/app/.externalNativeBuild/cmake/debug/x86 --target jrtplib-shared}
[1/3] Building CXX object src/CMakeFiles/jrtplib-shared.dir/rtpudpv4transmitter.cpp.o
[2/3] Building CXX object src/CMakeFiles/jrtplib-shared.dir/rtpudpv6transmitter.cpp.o
FAILED: /android-sdk-linux/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=i686-none-linux-android --gcc-toolchain=/android-sdk-linux/ndk-bundle/toolchains/x86-4.9/prebuilt/linux-x86_64 --sysroot=/android-sdk-linux/ndk-bundle/sysroot -DJRTPLIB_COMPILING -Djrtplib_shared_EXPORTS -I/home/project/src/jscam/JRTPLIB/src -Isrc -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backward-isystem /android-sdk-linux/ndk-bundle/sysroot/usr/include/i686-linux-android -D__ANDROID_API__=16 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fno-limit-debug-info -fPIC -MD -MT src/CMakeFiles/jrtplib-shared.dir/rtpudpv6transmitter.cpp.o -MF src/CMakeFiles/jrtplib-shared.dir/rtpudpv6transmitter.cpp.o.d -o src/CMakeFiles/jrtplib-shared.dir/rtpudpv6transmitter.cpp.o -c /home/project/src/jscam/JRTPLIB/src/rtpudpv6transmitter.cpp
/home/project/src/jscam/JRTPLIB/src/rtpudpv6transmitter.cpp:1575:2: error: use of undeclared identifier 'getifaddrs'
getifaddrs(&addrs);
^
/home/project/src/jscam/JRTPLIB/src/rtpudpv6transmitter.cpp:1588:2: error: use of undeclared identifier 'freeifaddrs'
freeifaddrs(addrs);
^
2 errors generated.
FAILED: /android-sdk-linux/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=i686-none-linux-android --gcc-toolchain=/android-sdk-linux/ndk-bundle/toolchains/x86-4.9/prebuilt/linux-x86_64 --sysroot=/android-sdk-linux/ndk-bundle/sysroot -DJRTPLIB_COMPILING -Djrtplib_shared_EXPORTS -I/home/project/src/jscam/JRTPLIB/src -Isrc -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backward-isystem /android-sdk-linux/ndk-bundle/sysroot/usr/include/i686-linux-android -D__ANDROID_API__=16 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fno-limit-debug-info -fPIC -MD -MT src/CMakeFiles/jrtplib-shared.dir/rtpudpv4transmitter.cpp.o -MF src/CMakeFiles/jrtplib-shared.dir/rtpudpv4transmitter.cpp.o.d -o src/CMakeFiles/jrtplib-shared.dir/rtpudpv4transmitter.cpp.o -c /home/project/src/jscam/JRTPLIB/src/rtpudpv4transmitter.cpp
/home/project/src/jscam/JRTPLIB/src/rtpudpv4transmitter.cpp:1813:2: error: use of undeclared identifier 'getifaddrs'
getifaddrs(&addrs);
^
/home/project/src/jscam/JRTPLIB/src/rtpudpv4transmitter.cpp:1826:2: error: use of undeclared identifier 'freeifaddrs'
freeifaddrs(addrs);
^
2 errors generated.
ninja: build stopped: subcommand failed.

最佳答案

Android NDK 有 <ifaddrs.h>为你。但是缺少的功能,如 getifaddrs(),可用于 __ANDROID_API__ 24 及更高,而您的项目设置为 __ANDROID_API__=16

如果您的库将与低于 24 的 minSdkVersion 一起使用,您将无法使用这些功能。不幸的是,JRTPLIB 似乎没有对 ifaddrs 的如此精细的支持,但如果您愿意,您可以强制关闭 RTP_SUPPORT_IFADDRS

关于android - Cmake 测试被忽略 - 在 android 中使用 gradle 构建 cmake 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49935883/

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