Common Architecture and Tooling Constraints

Static Linking and Monolithic Builds

Marmalade's static build architecture can make it difficult to modularize components or support dynamic plugins. This design often leads to:

  • Long build times
  • Complex linker errors with minimal diagnostic support
  • Inflexibility in third-party library integration

Limited Debugging Support

The Marmalade debugger was tightly coupled with its IDE and deprecated GCC toolchains. Developers now often face:

  • Incompatibilities with modern debugging tools
  • Inconsistent stack traces on newer OS versions
  • Difficulty in stepping through Marmalade’s rendering pipeline

Key Troubleshooting Scenarios

1. Marmalade App Crashes on Startup (iOS/Android)

Common on devices running newer OS versions due to outdated SDK integration:

dyld: Symbol not found: __ZTVN10__cxxabiv117__class_type_infoE

Fix:

  • Ensure compatibility with minimum supported OS version in build settings
  • Statically link libc++ if targeting iOS 11+
  • Review 's3e' extension usage for deprecated APIs

2. Undefined Symbols During Link Phase

Especially with custom or 3rd-party modules:

undefined reference to `MyCustomExtensionInit'

Fix:

  • Ensure proper implementation in both header and source files
  • Add missing implementation files to the `.mkb` project descriptor
  • Use `s3eExtRegister()` and `s3eDeviceRegister()` properly

3. Texture or Audio Assets Not Loading

Often due to incorrect resource group paths or packaging config in `data.py`:

Resource not found: /data/sprites/player.png

Fix:

  • Verify resource group structure in `resources` section
  • Use `IwGetResManager()->GetGroupNamed("main")` to load group before asset
  • Rebuild with `mkb --clean` to ensure packaging includes updated assets

System-Level Compatibility Issues

Windows 10/11 and Modern macOS Builds

Marmalade SDK was not designed for newer host platforms. Common problems:

  • Build toolchain fails due to Visual Studio version mismatch
  • 64-bit architecture support missing in iOS builds
  • SDL or GLES shims may crash under new GPU drivers

Solutions include:

  • Force compatibility mode in Windows for Marmalade Hub
  • Use containerized builds with older GCC/Clang toolchains
  • Patch OpenGL ES render layers for modern GPU drivers

Step-by-Step Fixes

Issue: Marmalade Hub Not Launching on Windows 11

Application error: msvcp100.dll not found

Fix:

  • Install Visual C++ 2010 Redistributable manually
  • Run MarmaladeHub.exe in Windows 7 compatibility mode

Issue: Android Build Fails with NDK Errors

Error: invalid NDK path or missing ndk-build

Fix:

  • Use Android NDK r10e (last fully supported version)
  • Update `.mkb` with correct `android-ndk-r10e` path

Issue: App Crash on SurfaceView Initialization (Android)

Usually due to incompatible EGL context or missing permissions.

java.lang.RuntimeException: EGL_BAD_CONFIG

Fix:

  • Ensure AndroidManifest.xml includes proper GL settings
  • Use `eglChooseConfig()` compatibility options in native layer

Best Practices for Legacy Marmalade Projects

  • Freeze SDK/toolchain version and document build environment
  • Use Docker/VMs to isolate legacy builds from host OS updates
  • Modularize assets and logic to ease future migration
  • Phase out `s3e` extensions in favor of standard C/C++ libraries
  • Use static analysis tools to spot memory and resource leaks

Conclusion

Although discontinued, Marmalade SDK still powers many deployed apps. Maintaining these systems requires careful environment replication, manual patching, and architectural isolation of legacy dependencies. Migrating away is ideal, but until then, teams should enforce reproducible builds, isolate custom modules, and proactively resolve compatibility gaps. By investing in modernization pathways now, developers can future-proof their applications and reduce long-term technical debt.

FAQs

1. Is Marmalade still supported?

No. Official support ended in 2016. However, existing installations can still be used in controlled environments.

2. Can Marmalade apps run on iOS 14+ or Android 12+?

With significant manual adjustments, yes. Developers must patch SDKs, update NDK paths, and test extensively on modern devices.

3. What's the best replacement for Marmalade SDK today?

Consider Unity, Godot (C++/GDScript), or Unreal Engine, depending on use case and performance needs.

4. How do I migrate Marmalade projects to modern engines?

Begin by decoupling game logic and assets. Port rendering and input handling to a modern framework incrementally.

5. Is it safe to use Marmalade in production today?

Only if the runtime environment is tightly controlled and no platform updates are expected. Migration is strongly advised.