Linking CXX shared library .....so FAILED

博客内容涉及Android应用开发中遇到的链接C++共享库时的错误。错误发生在尝试构建一个名为smart_cropper的库时,链接阶段出现未定义的引用问题,具体为'fegetenv'和'fesetenv'。解决方案是确保library模块的minSdkVersion和targetSdkVersion与主module保持一致。

Executing tasks: [clean, :smartcropperlib:assembleDebug, :app:assembleDebug]

:clean UP-TO-DATE
:app:clean
:smartcropperlib:externalNativeBuildCleanDebug
Clean smart_cropper armeabi-v7a
Cleaning... 3 files.
Clean smart_cropper arm64-v8a
Cleaning... 4 files.
Clean smart_cropper x86
Cleaning... 4 files.
Clean smart_cropper x86_64
Cleaning... 4 files.
:smartcropperlib:externalNativeBuildCleanRelease
Clean smart_cropper armeabi-v7a
Cleaning... 0 files.
Clean smart_cropper arm64-v8a
Cleaning... 0 files.
Clean smart_cropper x86
Cleaning... 0 files.
Clean smart_cropper x86_64
Cleaning... 0 files.
:smartcropperlib:clean
:smartcropperlib:preBuild UP-TO-DATE
:smartcropperlib:preDebugBuild UP-TO-DATE
:smartcropperlib:compileDebugAidl NO-SOURCE
:smartcropperlib:compileDebugRenderscript
:smartcropperlib:checkDebugManifest
:smartcropperlib:generateDebugBuildConfig
:smartcropperlib:generateDebugResValues
:smartcropperlib:generateDebugResources
:smartcropperlib:packageDebugResources
:smartcropperlib:processDebugManifest
:smartcropperlib:generateDebugRFile
:smartcropperlib:prepareLintJar UP-TO-DATE
:smartcropperlib:generateDebugSources
:smartcropperlib:javaPreCompileDebug
注: D:\opj\docScan\SmartCropper\smartcropperlib\src\main\java\me\pqpo\smartcropperlib\view\CropImageView.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
:smartcropperlib:compileDebugJavaWithJavac
:smartcropperlib:extractDebugAnnotations
:smartcropperlib:mergeDebugConsumerProguardFiles UP-TO-DATE
:smartcropperlib:mergeDebugShaders
:smartcropperlib:compileDebugShaders
:smartcropperlib:generateDebugAssets
:smartcropperlib:packageDebugAssets
:smartcropperlib:packageDebugRenderscript NO-SOURCE
:smartcropperlib:processDebugJavaRes NO-SOURCE
:smartcropperlib:transformResourcesWithMergeJavaResForDebug
:smartcropperlib:transformClassesAndResourcesWithSyncLibJarsForDebug
:smartcropperlib:generateJsonModelDebug UP-TO-DATE
:smartcropperlib:externalNativeBuildDebug
Build smart_cropper x86_64
[1/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/android_utils.cpp.o
[2/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/smart_cropper.cpp.o
[3/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/Scanner.cpp.o
[4/4] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libsmart_cropper.so
Build smart_cropper x86
[1/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/android_utils.cpp.o
[2/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/smart_cropper.cpp.o
[3/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/Scanner.cpp.o
[4/4] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86\libsmart_cropper.so
Build smart_cropper arm64-v8a
[1/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/android_utils.cpp.o
[2/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/smart_cropper.cpp.o
[3/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/Scanner.cpp.o
[4/4] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\arm64-v8a\libsmart_cropper.so
Build smart_cropper armeabi-v7a
[1/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/android_utils.cpp.o
[2/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/smart_cropper.cpp.o
[3/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/Scanner.cpp.o
[4/4] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libsmart_cropper.so
FAILED: ../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libsmart_cropper.so 
cmd.exe /C "cd . && C:\Users\ASUS\AppData\Local\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi19 --gcc-toolchain=C:/Users/ASUS/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/ASUS/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security  -std=c++11 -frtti -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,-z,noexecstack -shared -Wl,-soname,libsmart_cropper.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libsmart_cropper.so CMakeFiles/smart_cropper.dir/src/main/cpp/Scanner.cpp.o CMakeFiles/smart_cropper.dir/src/main/cpp/android_utils.cpp.o CMakeFiles/smart_cropper.dir/src/main/cpp/smart_cropper.cpp.o -LD:/opj/docScan/SmartCropper/smartcropperlib/opencv/lib/armeabi-v7a  -LD:/opj/docScan/SmartCropper/smartcropperlib/opencv/3rdparty/armeabi-v7a -lopencv_imgproc -lopencv_core C:/Users/ASUS/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/libz.a -ltegra_hal -ltbb -lcpufeatures -llog -ljnigraphics -latomic -lm && cd ."
/build/master_pack-android/build/o4a/3rdparty/tbb/tbb-2018_U1/src/tbb/scheduler_common.h:431: error: undefined reference to 'fegetenv'
/build/master_pack-android/build/o4a/3rdparty/tbb/tbb-2018_U1/src/tbb/scheduler_common.h:435: error: undefined reference to 'fesetenv'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
:smartcropperlib:externalNativeBuildDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':smartcropperlib:externalNativeBuildDebug'.
> Build command failed.
  Error while executing process C:\Users\ASUS\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\cmake.exe with arguments {--build D:\opj\docScan\SmartCropper\smartcropperlib\.externalNativeBuild\cmake\debug\armeabi-v7a --target smart_cropper}
  [1/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/android_utils.cpp.o
  [2/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/smart_cropper.cpp.o
  [3/4] Building CXX object CMakeFiles/smart_cropper.dir/src/main/cpp/Scanner.cpp.o
  [4/4] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libsmart_cropper.so
  FAILED: ../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libsmart_cropper.so 
  cmd.exe /C "cd . && C:\Users\ASUS\AppData\Local\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi19 --gcc-toolchain=C:/Users/ASUS/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/ASUS/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security  -std=c++11 -frtti -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,-z,noexecstack -shared -Wl,-soname,libsmart_cropper.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libsmart_cropper.so CMakeFiles/smart_cropper.dir/src/main/cpp/Scanner.cpp.o CMakeFiles/smart_cropper.dir/src/main/cpp/android_utils.cpp.o CMakeFiles/smart_cropper.dir/src/main/cpp/smart_cropper.cpp.o -LD:/opj/docScan/SmartCropper/smartcropperlib/opencv/lib/armeabi-v7a  -LD:/opj/docScan/SmartCropper/smartcropperlib/opencv/3rdparty/armeabi-v7a -lopencv_imgproc -lopencv_core C:/Users/ASUS/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/libz.a -ltegra_hal -ltbb -lcpufeatures -llog -ljnigraphics -latomic -lm && cd ."
  /build/master_pack-android/build/o4a/3rdparty/tbb/tbb-2018_U1/src/tbb/scheduler_common.h:431: error: undefined reference to 'fegetenv'
  /build/master_pack-android/build/o4a/3rdparty/tbb/tbb-2018_U1/src/tbb/scheduler_common.h:435: error: undefined reference to 'fesetenv'
  clang++: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.

解决方法

在主项目的build.gradle里面添加

ext {
    compileSdkVersion = 28
    minSdkVersion = 21
    targetSdkVersion = 28
    supportLibraryVersion = '28.0.0'
}

在libary的build.gradle里面改为

 compileSdkVersion rootProject.ext.compileSdkVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 10
        versionName "2.1.4"

        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti"
                abiFilters 'armeabi-v7a', "arm64-v8a", 'x86', 'x86_64'
                arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static"
//                arguments "-DANDROID_STL=c++_shared"

            }
        }

    }

意思就是把libary的sdk版本改为和主module的sdk版本一致

minSdkVersion 和targetSdkVersion

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值