First I made one app as
module App
using SymEngine
function julia_main()::Cint
@vars x y
println(expand((x + y)^2))
return 0
end # function julia_main
end # module App
Then
using PackageCompiler
create_app("App/", "compiled")
Finally I got
compiled
|-- bin
| |-- App
| `-- julia
|-- lib
| |-- julia
| | |-- libLLVM-14jl.so
| | |-- libLLVM.so -> libLLVM-14jl.so
| | |-- libamd.so -> libamd.so.2.4.6
| | |-- libamd.so.2 -> libamd.so.2.4.6
| | |-- libamd.so.2.4.6
| | |-- libatomic.so -> libatomic.so.1.2.0
| | |-- libatomic.so.1 -> libatomic.so.1.2.0
| | |-- libatomic.so.1.2.0
| | |-- libblastrampoline.so -> libblastrampoline.so.5
| | |-- libblastrampoline.so.5
| | |-- libblastrampoline.so.5.4.0 -> libblastrampoline.so.5
| | |-- libbtf.so -> libbtf.so.1.2.6
| | |-- libbtf.so.1 -> libbtf.so.1.2.6
| | |-- libbtf.so.1.2.6
| | |-- libcamd.so -> libcamd.so.2.4.6
| | |-- libcamd.so.2 -> libcamd.so.2.4.6
| | |-- libcamd.so.2.4.6
| | |-- libccalltest.so
| | |-- libccalltest.so.debug
| | |-- libccolamd.so -> libccolamd.so.2.9.6
| | |-- libccolamd.so.2 -> libccolamd.so.2.9.6
| | |-- libccolamd.so.2.9.6
| | |-- libcholmod.so -> libcholmod.so.3.0.14
| | |-- libcholmod.so.3 -> libcholmod.so.3.0.14
| | |-- libcholmod.so.3.0.14
| | |-- libcolamd.so -> libcolamd.so.2.9.6
| | |-- libcolamd.so.2 -> libcolamd.so.2.9.6
| | |-- libcolamd.so.2.9.6
| | |-- libcurl.so -> libcurl.so.4.8.0
| | |-- libcurl.so.4 -> libcurl.so.4.8.0
| | |-- libcurl.so.4.8.0
| | |-- libdSFMT.so
| | |-- libgcc_s.so.1
| | |-- libgfortran.so -> libgfortran.so.5.0.0
| | |-- libgfortran.so.5 -> libgfortran.so.5.0.0
| | |-- libgfortran.so.5.0.0
| | |-- libgit2.so -> libgit2.so.1.5
| | |-- libgit2.so.1.5 -> libgit2.so.1.5.0
| | |-- libgit2.so.1.5.0
| | |-- libgmp.so -> libgmp.so.10.4.1
| | |-- libgmp.so.10 -> libgmp.so.10.4.1
| | |-- libgmp.so.10.4.1
| | |-- libgmpxx.so -> libgmpxx.so.4.6.1
| | |-- libgmpxx.so.4 -> libgmpxx.so.4.6.1
| | |-- libgmpxx.so.4.6.1
| | |-- libgomp.so -> libgomp.so.1.0.0
| | |-- libgomp.so.1 -> libgomp.so.1.0.0
| | |-- libgomp.so.1.0.0
| | |-- libjulia-codegen.so -> libjulia-codegen.so.1.9
| | |-- libjulia-codegen.so.1 -> libjulia-codegen.so.1.9
| | |-- libjulia-codegen.so.1.9
| | |-- libjulia-internal.so -> libjulia-internal.so.1.9
| | |-- libjulia-internal.so.1 -> libjulia-internal.so.1.9
| | |-- libjulia-internal.so.1.9
| | |-- libklu.so -> libklu.so.1.3.8
| | |-- libklu.so.1 -> libklu.so.1.3.8
| | |-- libklu.so.1.3.8
| | |-- libldl.so -> libldl.so.2.2.6
| | |-- libldl.so.2 -> libldl.so.2.2.6
| | |-- libldl.so.2.2.6
| | |-- libllvmcalltest.so
| | |-- libmbedcrypto.so -> libmbedcrypto.so.7
| | |-- libmbedcrypto.so.2.28.2
| | |-- libmbedcrypto.so.7 -> libmbedcrypto.so.2.28.2
| | |-- libmbedtls.so -> libmbedtls.so.14
| | |-- libmbedtls.so.14 -> libmbedtls.so.2.28.2
| | |-- libmbedtls.so.2.28.2
| | |-- libmbedx509.so -> libmbedx509.so.1
| | |-- libmbedx509.so.1 -> libmbedx509.so.2.28.2
| | |-- libmbedx509.so.2.28.2
| | |-- libmpfr.so -> libmpfr.so.6.1.1
| | |-- libmpfr.so.6 -> libmpfr.so.6.1.1
| | |-- libmpfr.so.6.1.1
| | |-- libnghttp2.so -> libnghttp2.so.14.22.0
| | |-- libnghttp2.so.14 -> libnghttp2.so.14.22.0
| | |-- libnghttp2.so.14.22.0
| | |-- libopenblas64_.0.3.21.so
| | |-- libopenblas64_.so -> libopenblas64_.0.3.21.so
| | |-- libopenblas64_.so.0 -> libopenblas64_.0.3.21.so
| | |-- libopenlibm.so -> libopenlibm.so.4.0
| | |-- libopenlibm.so.4 -> libopenlibm.so.4.0
| | |-- libopenlibm.so.4.0
| | |-- libpcre2-8.so -> libpcre2-8.so.0.11.2
| | |-- libpcre2-8.so.0 -> libpcre2-8.so.0.11.2
| | |-- libpcre2-8.so.0.11.2
| | |-- libquadmath.so -> libquadmath.so.0.0.0
| | |-- libquadmath.so.0 -> libquadmath.so.0.0.0
| | |-- libquadmath.so.0.0.0
| | |-- librbio.so -> librbio.so.2.2.6
| | |-- librbio.so.2 -> librbio.so.2.2.6
| | |-- librbio.so.2.2.6
| | |-- libspqr.so -> libspqr.so.2.0.9
| | |-- libspqr.so.2 -> libspqr.so.2.0.9
| | |-- libspqr.so.2.0.9
| | |-- libssh2.so -> libssh2.so.1
| | |-- libssh2.so.1 -> libssh2.so.1.0.1
| | |-- libssh2.so.1.0.1
| | |-- libssp.so -> libssp.so.0.0.0
| | |-- libssp.so.0 -> libssp.so.0.0.0
| | |-- libssp.so.0.0.0
| | |-- libstdc++.so -> libstdc++.so.6.0.30
| | |-- libstdc++.so.6 -> libstdc++.so.6.0.30
| | |-- libstdc++.so.6.0.30
| | |-- libsuitesparseconfig.so -> libsuitesparseconfig.so.5.10.1
| | |-- libsuitesparseconfig.so.5 -> libsuitesparseconfig.so.5.10.1
| | |-- libsuitesparseconfig.so.5.10.1
| | |-- libumfpack.so -> libumfpack.so.5.7.9
| | |-- libumfpack.so.5 -> libumfpack.so.5.7.9
| | |-- libumfpack.so.5.7.9
| | |-- libunwind.so -> libunwind.so.8.0.1
| | |-- libunwind.so.8 -> libunwind.so.8.0.1
| | |-- libunwind.so.8.0.1
| | |-- libuv.so -> libuv.so.2.0.0
| | |-- libuv.so.2 -> libuv.so.2.0.0
| | |-- libuv.so.2.0.0
| | |-- libz.so -> libz.so.1
| | |-- libz.so.1 -> libz.so.1.2.13
| | |-- libz.so.1.2.13
| | `-- sys.so
| |-- libjulia.so -> libjulia.so.1.9
| |-- libjulia.so.1 -> libjulia.so.1.9
| `-- libjulia.so.1.9
`-- share
`-- julia
|-- Project.toml
|-- artifacts
| |-- 576d0dbb8081c9f93f59183fdfa3855c5702e616
| | |-- include
| | | `-- mpc.h
| | |-- lib
| | | |-- libmpc.so -> libmpc.so.3.2.1
| | | |-- libmpc.so.3 -> libmpc.so.3.2.1
| | | `-- libmpc.so.3.2.1
| | |-- logs
| | | `-- MPC
| | | |-- MPC.log.gz
| | | |-- update_linkage_libmpc.so.3.2.1_libgmp.so.10.log.gz
| | | |-- update_linkage_libmpc.so.3.2.1_libmpfr.so.6.log.gz
| | | `-- update_rpath_libmpc.so.3.2.1_libgmp.so.10.log.gz
| | `-- share
| | |-- info
| | | `-- mpc.info
| | `-- licenses
| | `-- MPC
| | `-- COPYING.LESSER
| |-- 7b99956590f90a608ded76e0757af76a17f8289a
| | |-- include
| | | `-- symengine
| | | |-- add.h
| | | |-- assumptions.h
| | | |-- basic-inl.h
| | | |-- basic-methods.inc
| | | |-- basic.h
| | | |-- complex.h
| | | |-- complex_double.h
| | | |-- complex_mpc.h
| | | |-- constants.h
| | | |-- cwrapper.h
| | | |-- derivative.h
| | | |-- dict.h
| | | |-- diophantine.h
| | | |-- eval.h
| | | |-- eval_arb.h
| | | |-- eval_double.h
| | | |-- eval_mpc.h
| | | |-- eval_mpfr.h
| | | |-- expression.h
| | | |-- fields.h
| | | |-- finitediff.h
| | | |-- flint_wrapper.h
| | | |-- functions.h
| | | |-- infinity.h
| | | |-- integer.h
| | | |-- lambda_double.h
| | | |-- llvm_double.h
| | | |-- logic.h
| | | |-- matrix.h
| | | |-- monomials.h
| | | |-- mp_class.h
| | | |-- mp_wrapper.h
| | | |-- mul.h
| | | |-- nan.h
| | | |-- ntheory.h
| | | |-- ntheory_funcs.h
| | | |-- number.h
| | | |-- parser
| | | | |-- parser.h
| | | | |-- sbml
| | | | | |-- sbml_parser.h
| | | | | `-- sbml_tokenizer.h
| | | | `-- tokenizer.h
| | | |-- parser.h
| | | |-- polys
| | | | |-- basic_conversions.h
| | | | |-- cancel.h
| | | | |-- msymenginepoly.h
| | | | |-- uexprpoly.h
| | | | |-- uintpoly.h
| | | | |-- uintpoly_flint.h
| | | | |-- uintpoly_piranha.h
| | | | |-- upolybase.h
| | | | |-- uratpoly.h
| | | | `-- usymenginepoly.h
| | | |-- pow.h
| | | |-- prime_sieve.h
| | | |-- printers
| | | | |-- codegen.h
| | | | |-- latex.h
| | | | |-- mathml.h
| | | | |-- sbml.h
| | | | |-- strprinter.h
| | | | `-- unicode.h
| | | |-- printers.h
| | | |-- rational.h
| | | |-- real_double.h
| | | |-- real_mpfr.h
| | | |-- refine.h
| | | |-- rings.h
| | | |-- serialize-cereal.h
| | | |-- series.h
| | | |-- series_flint.h
| | | |-- series_generic.h
| | | |-- series_piranha.h
| | | |-- series_visitor.h
| | | |-- sets.h
| | | |-- simplify.h
| | | |-- solve.h
| | | |-- subs.h
| | | |-- symbol.h
| | | |-- symengine_assert.h
| | | |-- symengine_casts.h
| | | |-- symengine_config.h
| | | |-- symengine_config_cling.h
| | | |-- symengine_exception.h
| | | |-- symengine_export.h
| | | |-- symengine_rcp.h
| | | |-- test_visitors.h
| | | |-- tuple.h
| | | |-- type_codes.inc
| | | |-- utilities
| | | | |-- cereal
| | | | | `-- include
| | | | | `-- cereal
| | | | | |-- access.hpp
| | | | | |-- archives
| | | | | | |-- adapters.hpp
| | | | | | |-- binary.hpp
| | | | | | |-- json.hpp
| | | | | | |-- portable_binary.hpp
| | | | | | `-- xml.hpp
| | | | | |-- cereal.hpp
| | | | | |-- details
| | | | | | |-- helpers.hpp
| | | | | | |-- polymorphic_impl.hpp
| | | | | | |-- polymorphic_impl_fwd.hpp
| | | | | | |-- static_object.hpp
| | | | | | |-- traits.hpp
| | | | | | `-- util.hpp
| | | | | |-- macros.hpp
| | | | | |-- specialize.hpp
| | | | | |-- types
| | | | | | |-- array.hpp
| | | | | | |-- atomic.hpp
| | | | | | |-- base_class.hpp
| | | | | | |-- bitset.hpp
| | | | | | |-- boost_variant.hpp
| | | | | | |-- chrono.hpp
| | | | | | |-- common.hpp
| | | | | | |-- complex.hpp
| | | | | | |-- concepts
| | | | | | | `-- pair_associative_container.hpp
| | | | | | |-- deque.hpp
| | | | | | |-- forward_list.hpp
| | | | | | |-- functional.hpp
| | | | | | |-- list.hpp
| | | | | | |-- map.hpp
| | | | | | |-- memory.hpp
| | | | | | |-- optional.hpp
| | | | | | |-- polymorphic.hpp
| | | | | | |-- queue.hpp
| | | | | | |-- set.hpp
| | | | | | |-- stack.hpp
| | | | | | |-- string.hpp
| | | | | | |-- tuple.hpp
| | | | | | |-- unordered_map.hpp
| | | | | | |-- unordered_set.hpp
| | | | | | |-- utility.hpp
| | | | | | |-- valarray.hpp
| | | | | | |-- variant.hpp
| | | | | | `-- vector.hpp
| | | | | `-- version.hpp
| | | | `-- stream_fmt.h
| | | `-- visitor.h
| | |-- lib
| | | |-- cmake
| | | | `-- symengine
| | | | |-- SymEngineConfig.cmake
| | | | |-- SymEngineConfigVersion.cmake
| | | | |-- SymEngineTargets-release.cmake
| | | | `-- SymEngineTargets.cmake
| | | |-- libsymengine.so -> libsymengine.so.0.9
| | | |-- libsymengine.so.0.9 -> libsymengine.so.0.9.0
| | | `-- libsymengine.so.0.9.0
| | `-- share
| | `-- licenses
| | `-- SymEngine
| | `-- LICENSE
| `-- abf4b5086b4eb867021118c85b2cc11a15b764a9
| |-- include
| | `-- Faddeeva.h
| |-- lib
| | |-- libopenspecfun.a
| | |-- libopenspecfun.so -> libopenspecfun.so.1.4
| | |-- libopenspecfun.so.1 -> libopenspecfun.so.1.4
| | `-- libopenspecfun.so.1.4
| |-- logs
| | `-- OpenSpecFun
| | |-- OpenSpecFun.log.gz
| | `-- relink_to_rpath_libopenspecfun.so.1.4.log.gz
| `-- share
| `-- licenses
| `-- OpenSpecFun
| `-- LICENSE.md
`-- cert.pem
I ran compiled/bin/App
, and it printed 2*x*y + x^2 + y^2
as expected.
However, when I ran it in a new container (from the same image), it throwed that
fatal: error thrown and no exception handler available.
InitError(mod=:SymEngine, error=ErrorException("could not load library "/root/.julia/artifacts/7b99956590f90a608ded76e0757af76a17f8289a/lib/libsymengine.so"
/root/.julia/artifacts/7b99956590f90a608ded76e0757af76a17f8289a/lib/libsymengine.so: cannot open shared object file: No such file or directory"))
ijl_errorf at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/rtutils.c:77
ijl_load_dynamic_library at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/dlload.c:369
jl_get_library_ at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/runtime_ccall.cpp:48 [inlined]
jl_get_library_ at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/runtime_ccall.cpp:30
ijl_load_and_lookup at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/runtime_ccall.cpp:61
jlplt_basic_new_stack_39327.clone_1 at /root/compiled/lib/julia/sys.so (unknown line)
init_constants at /root/.julia/packages/SymEngine/ND5HB/src/mathops.jl:98
__init__ at /root/.julia/packages/SymEngine/ND5HB/src/SymEngine.jl:37
jfptr___init___39281.clone_1 at /root/compiled/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/julia.h:1879 [inlined]
jl_module_run_initializer at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/toplevel.c:75
_finish_julia_init at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/init.c:850
julia_init at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/init.c:799
jl_repl_entrypoint at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/src/jlapi.c:711
main at /cache/build/default-amdci4-0/julialang/julia-release-1-dot-9/cli/loader_exe.c:59
unknown function (ip: 0x7fb89c242d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x401098)
Why and how to fix it?
Thank you very much~