Encountering errors while compiling native Android APK?

Encountering errors while compiling native Android APK?

PS C:\Users\Administrator\Desktop\Stage3DCamera> lime build android -release
Error: Uncaught exception on main thread: Process creation failure : arm-linux-androideabi-g++

Called from sys.io.Process::new line 95
Called from a C function
Called from sys.io.Process::$init line 85
Called from ProcessManager::readStdout line 177
Called from Compiler::createCompilerVersion line 512
Called from Compiler::setPCH line 696
Called from Compiler::initPrecompile line 722
Called from BuildTool::buildTarget line 457
Called from BuildTool::buildTarget line 419
Called from BuildTool::new line 323
Called from a C function
Called from BuildTool::$init line 46
Called from BuildTool::runMain line 1910
Called from BuildTool::main line 1573
PS C:\Users\Administrator\Desktop\Stage3DCamera>

I found the problem, it’s an error setting Android ‘ndk’

<?xml version="1.0" encoding="utf-8"?>
<config>
	
	<section id="defines">
		
		
	</section>
	<define name="ANDROID_SDK" value="C:\Users\Administrator\AppData\Local\Android\Sdk" />
	<define name="ANDROID_NDK_ROOT" value="C:\Users\Administrator\AppData\Local\Android\Sdk\ndk" />
	<define name="JAVA_HOME" value="C:\Program Files\Eclipse Adoptium\jdk-17.0.20.101-hotspot" />
	<define name="ANDROID_SETUP" value="true" />
	
</config>
<?xml version="1.0" encoding="utf-8"?>
<config>
	
	<section id="defines">
		
		
	</section>
	<define name="ANDROID_SDK" value="C:\Users\Administrator\AppData\Local\Android\Sdk" />
	<define name="ANDROID_NDK_ROOT" value="C:\Users\Administrator\AppData\Local\Android\Sdk\ndk\21.4.7075529" />
	<define name="JAVA_HOME" value="C:\Program Files\Eclipse Adoptium\jdk-17.0.20.101-hotspot" />
	<define name="ANDROID_SETUP" value="true" />
	
</config>

I only set the Android ‘ndk’ path without adding the version number ‘21.4’,
This is the correct way:”Android\Sdk\ndk\21.4.7075529”

But encountered an error during compilation?

First, let’s take a look at ‘haxelib’:

Microsoft Windows [版本 10.0.19045.7727]
(c) Microsoft Corporation。保留所有权利。

C:\Users\Administrator>haxelib list
actuate: [1.9.0]
box2d: [1.2.4]
hxcpp-debug-server: [dev:c:\Users\Administrator.vscode\extensions\vshaxe.hxcpp-debugger-1.2.4\hxcpp-debug-server]
hxcpp: [git]
layout: [1.2.1]
lime-samples: [7.0.0]
lime: [8.3.2]
nape-haxe4: [2.0.22]
openfl-samples: [8.7.0]
openfl: [9.5.2]
starling: [2.8.0]
swf: [3.4.0]

C:\Users\Administrator>

Can you see that ‘hxcpp’ is a ‘git’ version, but encountered an error during compilation?

  • src/lime/graphics/opengl/ext/OES_stencil1.cpp
  • src/lime/graphics/opengl/ext/NV_depth_nonlinear.cpp
  • src/cpp/Prime.cpp

Compiling group: main
clang++ -Iinclude -DHX_DECLARE_MAIN --target=armv7a-linux-androideabi21 -DHXCPP_ARMV7 -DHXCPP_VISIT_ALLOCS(haxe) -DHX_SMART_STRINGS(haxe) -DHXCPP_API_LEVEL=430(haxe) -IC:/HaxeToolkit/haxe/lib/hxcpp/git/include -Iinclude -DANDROID=ANDROID -DHXCPP_CLANG -DHX_ANDROID -DHXCPP_ANDROID_PLATFORM=21 -fvisibility=hidden -ffunction-sections -fstack-protector -fexceptions -c -fpic -O2 -Wno-invalid-offsetof -Wno-return-type-c-linkage -Wno-parentheses … tags=[haxe,main,static]

  • src/main.cpp
    Creating C:/Users/Administrator/Desktop/Stage3DCamera/Export/android/obj/obj/android-v7/__pch/runtime/hxcpp.h.pch…

Compiling group: runtime
clang++ -DHX_UNDEFINE_H --target=armv7a-linux-androideabi21 -DHXCPP_ARMV7 -DHXCPP_VISIT_ALLOCS(haxe) -DHX_SMART_STRINGS(haxe) -DHXCPP_API_LEVEL=430(haxe) -IC:/HaxeToolkit/haxe/lib/hxcpp/git/include -Iinclude -DANDROID=ANDROID -DHXCPP_CLANG -DHX_ANDROID -DHXCPP_ANDROID_PLATFORM=21 -fvisibility=hidden -ffunction-sections -fstack-protector -fexceptions -c -fpic -O2 -Wno-invalid-offsetof -Wno-return-type-c-linkage -Wno-parentheses … tags=[haxe]

  • src/Array.cpp
  • src/hx/Date.cpp
  • src/hx/thread/ConditionVariable.cpp
  • src/hx/thread/RecursiveMutex.cpp
  • src/hx/Object.cpp
  • src/hx/Anon.cpp
  • src/hx/Boot.cpp
  • src/Enum.cpp
  • src/hx/thread/ThreadLocal.cpp
  • src/hx/AndroidCompat.cpp
    Error: C:/HaxeToolkit/haxe/lib/hxcpp/git/src/hx/AndroidCompat.cpp:77:1: error: expected ‘}’
    ^
    C:/HaxeToolkit/haxe/lib/hxcpp/git/src/hx/AndroidCompat.cpp:11:12: note: to match this ‘{’
    extern “C” {
    ^
    1 error generated.

C:\Users\Administrator\Desktop\Stage3DCamera>

#if (HXCPP_ANDROID_PLATFORM>=21) && !defined(HXCPP_M64)

#include <hxcpp.h>
#include <limits>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <dlfcn.h>
#include <android/log.h>

extern "C" {

// These functions are inlined prior to android-ndk-platform-21, which means they
// are missing from the libc functions on those older versions.
// If platform 21+ binaries are included in a build targetting an older platform,
// this file adds those missing symbols so the platform 21+ objects link without errors.

char * stpcpy(char *dest, const char *src)
{
  char *d = dest;
  const char *s = src;
  do
    *d++ = *s;
  while (*s++ != '\0');
  return d - 1;
}


int rand() { return lrand48(); }

void srand(unsigned int x) { srand48(x); }


double atof(const char *nptr)
{
    return (strtod(nptr, 0));
}

// For bsd_signal, the problem was that it was missing from libc versions for platform 21
// and above, until it was restored in ndk r13 for compatibilty.

#ifdef HXCPP_ANDROID_COMPAT_BSD_SIGNAL

typedef __sighandler_t (*bsd_signal_func_t)(int, __sighandler_t);
bsd_signal_func_t bsd_signal_func = 0;

__sighandler_t bsd_signal(int s, __sighandler_t f)
{
 if (bsd_signal_func == 0)
 {
   // For now (up to Android 7.0) this is always available
   bsd_signal_func = (bsd_signal_func_t) dlsym(RTLD_DEFAULT, "bsd_signal");

   if (bsd_signal_func == 0)
   {
     // You may try dlsym(RTLD_DEFAULT, "signal") or dlsym(RTLD_NEXT, "signal") here
     // Make sure you add a comment here in StackOverflow
     // if you find a device that doesn't have "bsd_signal" in its libc.so!!!

     __android_log_assert("", "bsd_signal_wrapper", "bsd_signal symbol not found!");
   }
 }

 return bsd_signal_func(s, f);
}

__sighandler_t signal(int s, __sighandler_t f)
{
    return bsd_signal(s,f);
}

}

#endif

#endif


I uninstalled the ‘hxcpp git’ version, installed ‘haxelib hxcpp’, and then successfully packaged the ‘apk’ and installed and ran it in my actual system, right? Has’ haxelib hxcpp 'been fixed?

haxe4.3.7

Microsoft Windows [版本 10.0.19045.7727]
(c) Microsoft Corporation。保留所有权利。

C:\Users\Administrator>haxelib list
actuate: [1.9.0]
box2d: [1.2.4]
hxcpp-debug-server: [1.2.4]
hxcpp: [4.3.2]
layout: [1.2.1]
lime-samples: [7.0.0]
lime: [8.3.2]
nape-haxe4: [2.0.22]
openfl-samples: [8.7.0]
openfl: [9.5.2]
starling: [2.8.0]
swf: [3.4.0]

C:\Users\Administrator>