its-pointless / julia

The Julia Language: A fresh approach to technical computing. Termux/Android
https://julialang.org/
Other
16 stars 2 forks source link

Error when add some packages in julia on termux #3

Open yfsmth opened 5 years ago

yfsmth commented 5 years ago

I've installed julia in termux on my android phone, it's great! But when I add some pkgs in julia, such as SpecialFunctions, I got some error as follow. It seems this pkg is provided by binary and julia cant find it, but there is aarch64 version pkg file indeed. How to resolve it? Thanks very much!

(v1.0) pkg> build SpecialFunctions Building SpecialFunctions → ~/.julia/packages/SpecialFunctions/sXbz6/deps/build.log ┌ Error: Error building SpecialFunctions: │ ┌ Warning: Platform aarch64--linux-android is not an officially supported platform │ └ @ BinaryProvider ~/.julia/packages/BinaryProvider/zp4zb/src/PlatformNames.jl:448 │ ERROR: LoadError: LoadError: KeyError: key "unknown" not found │ in expression starting at /data/data/com.termux/files/home/.julia/packages/BinaryProvider/zp4zb/src/PlatformNames.jl:676 │ in expression starting at /data/data/com.termux/files/home/.julia/packages/BinaryProvider/zp4zb/src/BinaryProvider.jl:12 │ ERROR: LoadError: Failed to precompile BinaryProvider [b99e7846-7c00-51b0-8f62-c81ae34c0232] to /data/data/com.termux/files/home/.julia/compiled/v1.0/BinaryProvider/ek6VZ.ji. │ in expression starting at /data/data/com.termux/files/home/.julia/packages/SpecialFunctions/sXbz6/deps/build.jl:1 └ @ Pkg.Operations ~/julia/usr/share/julia/stdlib/v1.0/Pkg/src/Operations.jl:1068p

its-pointless commented 5 years ago

This is due to a limitation on android to hace to use LD_LIBRARY_PATH. The way around it is if something needs external library we have tp produce the dep output which points to the library and have the library in normal termux lib directory. If i get around to it i will make a tutorial explaining how to it.

its-pointless commented 5 years ago

as a quick example ~/.julia/packages/ZMQ/ABGOx/deps/deps.jl const libzmq = "/data/data/com.termux/files/usr/lib/libzmq.so"

check_deps is not defined here so we have to account for that so we remove that line from function init() in src/ZMQ.jl.

after that package zmq will precompile using ZMQ you then do something similar with MbedTLS and you can actually get IJulia working.

For your specific issue i have precompiled external libopenspecfun so apt install libopenspecfunc and then point the correct const in deps.jl to that library you can work out what the name you need to use from build.jl

I would prefer a better solution but that would require me hacking pkg... and i don't have the time or even motivation to do that.

yfsmth commented 5 years ago

it works, thanks a lot! but it's not a easy work, maybe it's a better idea to build a package like juliapro in termux :)