编译 android .so 库在 Visual Studio 错误与 android ndk 15c __signbi



我在Visual Studio 2017中使用Android NDK 13B,我得到了Android NDK 15c的更新,它增加了一个错误。我也在使用新的 Clang 5.0(之前是 3.8)。这是错误:

/usr/local/google/buildbot/src/android/

ndk-r15-release/ndk/sources/android/support/src/stdio/vfprintf.c(242): 错误:未定义对"__signbit"的引用

这是我冗长的完整回应:

1>安卓 clang 版本 5.0.300080

(基于 LLVM 5.0.300080) 1>目标:i686-无-linux-android 1>线程模型:posix 1>安装目录: C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\llvm\prebuilt\windows-x86_64\bin 1>找到候选的GCC安装: C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\x86-4.9\prebuilt\windows-x86_64/lib/gcc/i686-linux-android\4.9.x 1>选定的 GCC 安装: C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\x86-4.9\prebuilt\windows-x86_64/lib/gcc/i686-linux-android/4.9.x 1>候选多库: .;@m32 1>选定的多库: .;@m32 1>"C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\x86-4.9\prebuilt\windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld" "--sysroot=C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\platforms\android-23\arch-x86" --eh-frame-hdr -m elf_i386 -shared -o "x86\Release\libPredictEngineMultiLang.so" "C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\platforms\android-23\arch-x86/usr/lib\crtbegin_so.o" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\5.0.300080\lib\linux\i386" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\x86-4.9\prebuilt\windows-x86_64/lib/gcc/i686-linux-android/4.9.x" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\x86-4.9\prebuilt\windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/lib" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\platforms\android-23\arch-x86/usr/lib" "-rpath-link=C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\platforms\android-23\arch-x86\usr\lib" "-rpath-link=C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\platforms\android-23\arch-x86\usr\lib" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\platforms\android-23\arch-x86\usr\lib" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\x86-4.9\prebuilt\windows-x86_64\lib\gcc\i686-linux-android\4.9.x" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\sources\cxx-stl\llvm-libc++\libs\x86" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\toolchains\x86-4.9\prebuilt\windows-x86_64\lib\gcc\i686-linux-android\4.9.x" "-LC:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\sources\cxx-stl\llvm-libc++\libs\x86" --no-undefined -z relro -z now -z noexecstack "x86\Release\CharsetConverter.o" "x86\Release\CppSQLite3.o" "x86\发布\PhonemConverterEN.o" "x86\Release\PhonemConverterFR.o" "x86\Release\PhoneticEngineEN.o" "x86\Release\PhoneticEngineFR.o" "x86\Release\PredictDb.o" "x86\Release\PredictEngineEN.o" "x86\Release\PredictEngineFR.o" "x86\Release\SearchEngineEN.o" "x86\Release\SearchEngineFR.o" "x86\Release\sqlite3.o" "x86\Release\DictionaryEN.o" "x86\Release\DictionaryFR.o" "x86\Release\PhonemEN.o" "x86\Release\PhonemFR.o" "x86\Release\PredictEN.o" "x86\发布\预测FR.o" "C:\Users\hhenry-garon\Downloads\OpenSSL-for-Android-Prebuilt-master\OpenSSL-for-Android-Prebuilt-master\openssl-1.0.2\x86\lib\libcrypto.a" -landroid_support -lc++_static -lc++abi -landroid_support -lc++_static -lc++abi -llog -landroid -lgcc -ldl -lc -lgcc -ldl "C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r15c\platforms\android-23\arch-x86/usr/lib\crtend_so.o" 1>/usr/local/google/buildbot/src/android/ndk-r15-release/ndk/sources/android/support/src/stdio/vfprintf.c(242): 错误:未定义对"__signbit"1>clang.exe的引用:错误: 链接器命令失败,退出代码为 1(使用 -v 查看调用)

我正在x86中编译一个android库.so,在Visual Studio 2017上使用Clang 5.0。我只读到也许我可以添加一个no-stdio配置,但我不知道在Visual Studio 2017中在哪里做。

谢谢

对于遇到这种情况的其他任何人 - 我通过在 vs. 的链接器标志中的"库依赖项"中添加"m"来解决此问题。 似乎libc++依赖于c数学库。像printf,sprintf等函数正在使用__signbit。

Visual Studio 2017 上的 Android NDK 15c 存在问题。 我使用的是 LLVM 静态,我更改为 GNU 静态,现在一切正常。

感谢微软(不是)

最新更新