JNI Symbol Conflicts in Mac OS


When I was adding Mac OS support to my open source project Javet, I found a weird behavior caused by JNI symbol conflicts which resulted in JVM 8 core-dump.

Javet is Java + V8 (JAVa + V + EighT). It is an awesome way of embedding Node.js and V8 in Java. It’s embedding behavior relies on 2 JNI libraries one for Node.js and one for V8. Both of them are loaded by dedicated classloader and share the same API and symbols, except that the Node.js one exposes more Node.js flavored symbols.

In Javet unit test, it loads both Node.js and V8 libraries and performs complicated test. The test goes well in Linux and Windows, but core-dumps in Mac OS.


The dump file shows the call stack crosses the library boundary.

...node...dylib <== Something wrong happens here.

It seems JVM in Mac OS registers global symbols in the same memory space, so that the V8 library calls into Node.js library. Obviously, that for sure leads to core-dump.

Failed Attempts

  • I tried various distributions of JDK 8. None of them worked. It seems to be the Mac OS’ behavior.
  • I tried to adjust the CMakeLists.txt. All my attempts failed.


I kept reviewing the call stack and realized the issue might be gone if these symbols were not global symbols.

So I created jni/exported_symbols_list.txt with the following content.


Then, I updated CMakeLists.txt with the following content.

target_link_libraries(Javet PUBLIC -exported_symbols_list ${CMAKE_SOURCE_DIR}/jni/exported_symbols_list.txt)

And, it works, no more core-dump with all test cases pass.




Amateur programmer

Love podcasts or audiobooks? Learn on the go with our new app.

Fostering security with Hashicorp Vault

Build Alexa Skill To Trigger Automated Tests

Development Update

Top 3 Selenium Functions To Make Your Life Easier

Python generator1 + generator2

Project Time Planning beyond the Milestone

Dungeon Farm: complete the staking activity in easy four steps


Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Sam Cao

Sam Cao

Amateur programmer

More from Medium

Security for Bitbucket per-repository configuration will be loaded from the default branch

Save Friday Night Using Chaos Engineering

How to send email using C# without any nugget Package

C#/VB.NET: Convert Excel Worksheets to Images (PNG, JPEG, EMF, SVG)