I’m trying to build a package that is dependent on the JavaCall package. The JavaCall package has some known issues with Mac which can be avoided by setting the environment variable ‘JULIA_COPY_STACKS=yes’ and starting Julia using the command-line flag ‘julia --handle-signals=no’.
After doing so, on a Mac I can start the JVM from within Julia without error using ‘JavaCall.init()’. The problem is, if ‘JavaCall.init()’ is called in my package, I get a segmentation fault upon loading the package via ‘using MyPackageWithJavaCall’. I’m wondering if when compiling the package Julia is unaware of the ‘–handle-signals=no’ or if one can force the package to be compiled with this flag.
Below is a minimal working example of a package that produces this segmentation fault and the particular error stack I get. Any help on this would be greatly appreciated!!
Simple Package
module JavaTest
# Dependencies
using JavaCall
# Check for required environment variable required for JavaCall
if ~haskey(ENV,"JULIA_COPY_STACKS")
error("Environment variable 'JULIA_COPY_STACKS=yes' is required for JavaCall package but is not defined.")
else
if ~(ENV["JULIA_COPY_STACKS"] == "yes")
error("Environment variable 'JULIA_COPY_STACKS=yes' is required for JavaCall package but is not defined.")
end
end
# Initialise Java Virtual Machine--SEGMENTATION FAULT HERE
JavaCall.init()
greet() = print("Hello World!")
end
And the error
using JavaTest
[ Info: Precompiling JavaTest [40cc168c-4df6-4a30-87ce-9a1cad52c5d0]
signal (11): Segmentation fault: 11
in expression starting at /Users/bvanderbeek/research/software/JuliaProjects/JavaTest/src/JavaTest.jl:16
unknown function (ip: 0x16090651b)
Allocations: 729607 (Pool: 729209; Big: 398); GC: 1
ERROR: Failed to precompile JavaTest [40cc168c-4df6-4a30-87ce-9a1cad52c5d0] to /Users/bvanderbeek/.julia/compiled/v1.8/JavaTest/jl_7kXmSn.
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:35
[2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
@ Base ./loading.jl:1705
[3] compilecache
@ ./loading.jl:1649 [inlined]
[4] _require(pkg::Base.PkgId)
@ Base ./loading.jl:1337
[5] _require_prelocked(uuidkey::Base.PkgId)
@ Base ./loading.jl:1200
[6] macro expansion
@ ./loading.jl:1180 [inlined]
[7] macro expansion
@ ./lock.jl:223 [inlined]
[8] require(into::Module, mod::Symbol)
@ Base ./loading.jl:1144