AndroidNDK尝试将库与pthread链接,尽管我没有添加它
这是SDK尝试链接我的项目时的输出:AndroidNDK尝试将库与pthread链接,尽管我没有添加它,android,c++,cmake,linker,Android,C++,Cmake,Linker,这是SDK尝试链接我的项目时的输出: : && /home/user/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi24 --gcc-toolchain=/home/user/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux
: && /home/user/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi24 --gcc-toolchain=/home/user/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/user/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-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 -std=c++17 -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -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,liborwell_android.so -o /home/user/orwell2/orwell_flutter_app/build/app/intermediates/cmake/debug/obj/armeabi-v7a/liborwell_android.so CMakeFiles/orwell_android.dir/orwell_jni.cpp.o CMakeFiles/orwell_android.dir/DecodedFfmpegFrameJNI.cpp.o CMakeFiles/orwell_android.dir/JavaOrwellFlutterRenderer.cpp.o CMakeFiles/orwell_android.dir/MediaCodecDecoder.cpp.o CMakeFiles/orwell_android.dir/JavaSimpleFileWriter.cpp.o CMakeFiles/orwell_android.dir/JavaHashMapJNI.cpp.o CMakeFiles/orwell_android.dir/JavaFlutterEventMessenger.cpp.o _liborwell/liborwell_static.a -landroid /home/user/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/24/liblog.so -lmediandk /home/user/orwell2/orwell_flutter_app/android/app/src/main/cpp/../../../../../../deps/ffmpeg/build/android/armeabi-v7a/lib/libavcodec.so /home/user/orwell2/orwell_flutter_app/android/app/src/main/cpp/../../../../../../deps/ffmpeg/build/android/armeabi-v7a/lib/libavutil.so /home/user/orwell2/orwell_flutter_app/android/app/src/main/cpp/../../../../../../deps/ffmpeg/build/android/armeabi-v7a/lib/libswscale.so /home/user/orwell2/orwell_flutter_app/android/app/src/main/cpp/../../../../../../deps/ffmpeg/build/android/armeabi-v7a/lib/libswresample.so -llog /home/user/orwell2/orwell_flutter_app/build/app/intermediates/cmake/debug/obj/armeabi-v7a/libmyRtspClient.so /home/user/orwell2/orwell_flutter_app/build/app/intermediates/cmake/debug/obj/armeabi-v7a/libjrtp.so _liborwell/_myRtspClient/libmyRtspClient-static.a _liborwell/_myRtspClient/_JTRPLIB/src/libjrtp.a _liborwell/_ZLMediaKit/libzlmediakit.a _liborwell/_ZLMediaKit/libzltoolkit.a _liborwell/_ZLMediaKit/libmpeg.a _liborwell/_ZLMediaKit/libmov.a _liborwell/_ZLMediaKit/libflv.a _liborwell/common/openvpn_zl_socket/libopenvpn_zl_socket.a _liborwell/common/openvpn_myrtsp_socket/libmyrtsp_vpn_tcp_transmitter.a _liborwell/_libopenvpn3/src/libopenvpn/libopenvpn_lib.a _liborwell/_libopenvpn3/openvpn3/libssl.a _liborwell/_libopenvpn3/openvpn3/libcrypto.a -lpthread _liborwell/_libopenvpn3/openvpn3/liblzo.a _liborwell/_libopenvpn3/openvpn3/liblz4.a _liborwell/_libopenvpn3/libtins/lib/libtins.a _liborwell/_libopenvpn3/smoltcp_cpp_interface/libsmoltcp_cpp_static.a /home/user/orwell2/deps/libopenvpn3/smoltcp_cpp_interface/target/debug/libsmoltcp_cpp_interface_rust.a -ldl _liborwell/common/liborwellebml/liborwell_ebml.a _liborwell/_libebml/libebml.a _liborwell/common/liborwellprofile/liborwell_profile.a -latomic -lm && :
然后我得到
/home/user/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lpthread
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
我不知道为什么它会链接到pthread,因为我在CMakeLists.txt中没有包含pthread:
cmake_minimum_required(VERSION 3.6)
add_compile_options(-D ANDROID)
set(COMPILE_TARGET ANDROID)
project(orwell_android)
set(FLAVOR ANDROID)
#temporary quirk for libtins
set(OPENSSL_INCLUDE_DIR "")
set(ORWELL_ANDROID_PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../..)
set(DEPENDENCIES ${ORWELL_ANDROID_PROJECT_ROOT}/deps/)
add_subdirectory(${ORWELL_ANDROID_PROJECT_ROOT}/liborwell/ _liborwell)
include(${ORWELL_ANDROID_PROJECT_ROOT}/liborwell/ORWELL_INCLUDES.cmake)
include_directories(${LIBORWELL_INCLUDE_DIRS})
find_library(log_library log)
file(GLOB ORWELL_ANDROID_SOURCES
"orwell_jni.cpp"
"DecodedFfmpegFrameJNI.cpp"
"JavaOrwellFlutterRenderer.cpp"
"MediaCodecDecoder.cpp"
"JavaSimpleFileWriter.cpp"
"JavaHashMapJNI.cpp"
"JavaFlutterEventMessenger.cpp")
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
set(FFMPEG_INCLUDE_DIR ${ORWELL_ANDROID_PROJECT_ROOT}/deps/ffmpeg/build/android/${ANDROID_ABI}/include)
include_directories(${FFMPEG_INCLUDE_DIR})
set(FFMPEG_LIB_DIR ${ORWELL_ANDROID_PROJECT_ROOT}/deps/ffmpeg/build/android/${ANDROID_ABI}/lib)
add_library(libavcodec SHARED IMPORTED)
set_target_properties(libavcodec PROPERTIES IMPORTED_LOCATION ${FFMPEG_LIB_DIR}/libavcodec.so)
add_library(libavutil SHARED IMPORTED)
set_target_properties(libavutil PROPERTIES IMPORTED_LOCATION ${FFMPEG_LIB_DIR}/libavutil.so)
add_library(libswscale SHARED IMPORTED)
set_target_properties(libswscale PROPERTIES IMPORTED_LOCATION ${FFMPEG_LIB_DIR}/libswscale.so)
add_library(libswresample SHARED IMPORTED)
set_target_properties(libswresample PROPERTIES IMPORTED_LOCATION ${FFMPEG_LIB_DIR}/libswresample.so)
add_library(orwell_android SHARED ${ORWELL_ANDROID_SOURCES})
add_dependencies(orwell_android orwell_static libavcodec libavutil libswscale libswresample)
target_link_libraries(orwell_android orwell_static android ${log_library} mediandk libavcodec libavutil libswscale libswresample)
您可以看到NDK正在尝试链接liborwell\u android
,这就是我在这里看到的,而且它没有在target\u link\u库中包含libpthread
我知道Android不需要pthread,那么如何强制它不包含pthread呢?_liborwell/_libopenvpn3/openvpn3/libssl.a _liborwell/_libopenvpn3/openvpn3/libcrypto.a-lpthread _liborwell/_libopenvpn3/openvpn3/liblzo.a
,基于编译器命令中的库序列,我最好的猜测是您在某个地方依赖OpenSSL(在${ORWELL\u ANDROID\u PROJECT\u ROOT}/liborwell/ORWELL_包括.cmake
?),它可能被配置为使用pthreads
。根据,可以将其配置为完全不使用线程:
[2] OpenSSL构建有线程功能,除非用户指定无线程
。密钥线程方案的值可能是(未知)
,在这种情况下,用户必须为配置
提供一些编译标志
_liborwell/_libopenvpn3/openvpn3/libssl.a _liborwell/_libopenvpn3/openvpn3/libcrypto.a-lpthread _liborwell/_libopenvpn3/openvpn3/liblzo.a
,基于编译器命令中的库序列,我最好的猜测是您在某个地方依赖OpenSSL(在${ORWELL\u ANDROID\u PROJECT\u ROOT}/liborwell/ORWELL_包括.cmake
?),它可能被配置为使用pthreads
。根据,可以将其配置为完全不使用线程:
[2] OpenSSL构建有线程功能,除非用户指定无线程
。密钥线程方案的值可能是(未知)
,在这种情况下,用户必须为配置
提供一些编译标志