OGRECave / ogre

scene-oriented, flexible 3D engine (C++, Python, C#, Java)
https://ogrecave.github.io/ogre/
MIT License
3.85k stars 959 forks source link

【OSX】Android Compiled error on MAC M1 #3093

Closed dandingol03 closed 3 months ago

dandingol03 commented 3 months ago

System Information

Detailled description

run cmake -DCMAKE_TOOLCHAIN_FILE=/Users/wangjunjie05/Downloads/android-sdk-mac/ndk/21.4.7075529/build/cmake/android.toolchain.cmake -DANDROID_NDK=/Users/wangjunjie05/Downloads/android-sdk-mac/ndk/21.4.7075529 .. then error occured

Ogre.log


wangjunjie05@baruideMacBook-Pro android % cmake -DCMAKE_TOOLCHAIN_FILE=/Users/wangjunjie05/Downloads/android-sdk-mac/ndk/21.4.7075529/build/cmake/android.toolchain.cmake -DANDROID_NDK=/Users/wangjunjie05/Downloads/android-sdk-mac/ndk/21.4.7075529   ..                                   
CMake Warning at /Users/wangjunjie05/Downloads/android-sdk-mac/ndk/19.2.5345600/build/cmake/android.toolchain.cmake:65 (message):
  Using custom NDK path (ANDROID_NDK is set):
  /Users/wangjunjie05/Downloads/android-sdk-mac/ndk/21.4.7075529
Call Stack (most recent call first):
  CMakeFiles/3.29.0/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:50 (enable_language)

-- ANDROID_PLATFORM not set. Defaulting to minimum supported version
16.
-- The OBJC compiler identification is AppleClang 15.0.0.15000309
-- Detecting OBJC compiler ABI info
-- Detecting OBJC compiler ABI info - failed
-- Check for working OBJC compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
-- Check for working OBJC compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang - broken
CMake Error at /Applications/CMake.app/Contents/share/cmake-3.29/Modules/CMakeTestOBJCCompiler.cmake:64 (message):
  The Objective-C compiler

    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: '/Users/wangjunjie05/Documents/Github/ogre/CMakeFiles/CMakeScratch/TryCompile-PjKa4V'

    Run Build Command(s): /Applications/CMake.app/Contents/bin/cmake -E env VERBOSE=1 /usr/bin/make -f Makefile cmTC_44496/fast
    /Applications/Xcode.app/Contents/Developer/usr/bin/make  -f CMakeFiles/cmTC_44496.dir/build.make CMakeFiles/cmTC_44496.dir/build
    Building OBJC object CMakeFiles/cmTC_44496.dir/testObjCCompiler.m.o
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang --sysroot=/Users/wangjunjie05/Downloads/android-sdk-mac/ndk/19.2.5345600/toolchains/llvm/prebuilt/darwin-x86_64/sysroot   -x objective-c -fPIE -MD -MT CMakeFiles/cmTC_44496.dir/testObjCCompiler.m.o -MF CMakeFiles/cmTC_44496.dir/testObjCCompiler.m.o.d -o CMakeFiles/cmTC_44496.dir/testObjCCompiler.m.o -c /Users/wangjunjie05/Documents/Github/ogre/CMakeFiles/CMakeScratch/TryCompile-PjKa4V/testObjCCompiler.m
    Linking OBJC executable cmTC_44496
    /Applications/CMake.app/Contents/bin/cmake -E cmake_link_script CMakeFiles/cmTC_44496.dir/link.txt --verbose=1
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang --sysroot=/Users/wangjunjie05/Downloads/android-sdk-mac/ndk/19.2.5345600/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -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 -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections   CMakeFiles/cmTC_44496.dir/testObjCCompiler.m.o -o cmTC_44496
    ld: unknown options: --exclude-libs --exclude-libs --build-id --warn-shared-textrel --fatal-warnings --exclude-libs --no-undefined -z -z -z --gc-sections 
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [cmTC_44496] Error 1
    make: *** [cmTC_44496/fast] Error 2

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:50 (enable_language)
paroj commented 3 months ago

cross compiling from OSX to android is mostly untested. It seems your system picks up the wrong compiler (the OSX one)

try

cmake -DANDROID -DCMAKE_TOOLCHAIN_FILE=..
dandingol03 commented 3 months ago

Hi, thanks for your kindly reply! After i add -DANDROID=on, the compiling goes fine. However when i run the NativeActivity in SampleBrowserNDk, it crashes. Here is the log:

      java.lang.RuntimeException: Unable to start activity ComponentInfo{org.ogre.browser/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to find native library OgreSampleBrowser using classloader: dalvik.system.PathClassLoader[DexPathList[[],nativeLibraryDirectories=[/data/app/~~SmkbL73wZwJtfR7wPgLRaA==/org.ogre.browser-6hKon6CpSdD369Odq4eMHQ==/lib/arm64, /system/lib64, /system/system_ext/lib64]]]
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3846)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4022)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2336)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:246)
       at android.app.ActivityThread.main(ActivityThread.java:8653)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
      Caused by: java.lang.IllegalArgumentException: Unable to find native library OgreSampleBrowser using classloader: dalvik.system.PathClassLoader[DexPathList[[],nativeLibraryDirectories=[/data/app/~~SmkbL73wZwJtfR7wPgLRaA==/org.ogre.browser-6hKon6CpSdD369Odq4eMHQ==/lib/arm64, /system/lib64, /system/system_ext/lib64]]]
       at android.app.NativeActivity.onCreate(NativeActivity.java:164)
       at android.app.Activity.performCreate(Activity.java:8207)
       at android.app.Activity.performCreate(Activity.java:8191)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)

It seems like that there is no OgreSampleBrowser lib in the jniLibs.

image

Here is the command i run on M1 Mac:

  1. cmake -DANDROID=on -DCMAKE_TOOLCHAIN_FILE=/Users/wangjunjie05/Downloads/android-sdk-mac/ndk/21.4.7075529/build/cmake/android.toolchain.cmake -DANDROID_NDK=/Users/wangjunjie05/Downloads/android-sdk-mac/ndk/21.4.7075529 ..
  2. ./gradlew assembleRelease
paroj commented 3 months ago

check your build log, it should have linked some JNI library like: https://github.com/OGRECave/ogre/actions/runs/8865433793/job/24341676635#step:5:2454