We have been working on a number of simplifications on master, so some of the best practices and extra steps aren't necessary anymore. But it should still work on v0.4.
There are a few different goals that can be accomplished by invoking the Julia compiler directly, so it was a bit difficult to write that blog post talking about them all generically. Since it touches on several of the optimization options, I structured it in part to show how these layers can build on each other. But I decided to leave out demonstrations of how mixing various layers and options can be used to create other products. Since most of these steps are already configured in the Julia build system, one of the easiest ways to augment it is to simply drop a userimg.jl file into base/ This will then get incorporated into the usual build and become part of the pre-defined system image. The `-e nothing` stage is there because you have to give it something to evaluate (a file, stdin, or `-e`, etc.), or it will pop open the REPL and wait for the user to enter commands. This is actually also a valid way to create an executable and can be fun to play with as a development exercise (I still do this on occasion to test out how it is handling odd cases). To get a ccallable declaration to show up in the binary, the only condition is that you must declare it ccallable in the same execution step as the final output. -jameson On Thu, May 12, 2016 at 10:23 AM Ján Adamčák <jadam...@gmail.com> wrote: > Thanks @Jameson, > > I am a bit confused about "you are not adding any code to the system image > (`--eval nothing`)". According to your blog > http://juliacomputing.com/blog/2016/02/09/static-julia.html , I think > that this is a crucial point to obtain a small sized dll. Am I right? > > What is then the right way to emit "ccallable" declarations in order to > export julia function(s)? (foo in our example from the original post in > this thread) > > Is it okay to work with current version of julia 0.4.5. or I have to > switch to another version; If yes, to which one? > > Thanks in advance. > > Dňa utorok, 10. mája 2016 22:13:57 UTC+2 Jameson napísal(-a): > >> The compile-all flag is only partially functional on v0.4. I think it's >> best to just leave it off. I tested on master and fixed a bug with emitting >> `@ccallable`, but that's unrelated. From the command line below, it looks >> like you are not adding any code to the system image (`--eval nothing`) >> which would also means there are no `ccallable` declarations being emitted >> into the current compile. >> >> Other than that, I don't see anything wrong with that command. You >> shouldn't see that error unless you tried to make a Task or use `@async` >> from the compile host. It's ambiguous how that would be serialized, so it's >> simply an error and any parallel workers should be created / started by an >> `__init__` method. >> >> >> On Tuesday, May 10, 2016 at 2:53:22 AM UTC-4, Ján Adamčák wrote: >>> >>> Hello guys, >>> >>> Thank you for your comments, though we were more optimistic... >>> >>> >>> Dňa piatok, 6. mája 2016 16:27:28 UTC+2 Ján Adamčák napísal(-a): >>>> >>>> Sorry, my fault. >>>> >>>> During last week I created build_sysimg2.jl from julia 0.4.5 >>>> build_sysimg.jl and when I run it, at line 86 (build_sysimg2.jl) >>>> >>>> run(`$julia -C $cpu_target --output-o sysimg_all.o --sysimage >>>> $sysimg_path.$(Libdl.dlext) --startup-file=no --compile=all --eval >>>> nothing`) >>>> >>>> I got this error: >>>> >>>> fatal: error thrown and no exception handler available. >>>> ErrorException("Task cannot be serialized") >>>> jl_unprotect_stack at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_throw at C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll >>>> (unknown line) >>>> jl_error at C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll >>>> (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_compress_ast at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_save_system_image_to_stream at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_create_system_image at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> jl_atexit_hook at >>>> C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\libjulia.dll (unknown line) >>>> unknown function (ip: 00000000004028B5) >>>> unknown function (ip: 000000000040140C) >>>> unknown function (ip: 000000000040153B) >>>> BaseThreadInitThunk at C:\WINDOWS\system32\KERNEL32.DLL (unknown line) >>>> RtlUserThreadStart at C:\WINDOWS\SYSTEM32\ntdll.dll (unknown line) >>>> ERROR: LoadError: failed process: >>>> Process(`'C:\Users\Adam\AppData\Local\Julia-0.4.5\bin\julia' -C native >>>> --output-o sysimg_all.o --sysimage my_img.dll --startup-file=no >>>> --compile=all --eval nothing`, ProcessExited(1)) [1] >>>> in run at process.jl:531 >>>> while loading >>>> c:\Users\Adam\AppData\Local\Julia-0.4.5\share\julia\build_sysimg2.jl, in >>>> expression starting on line 191 >>>> >>>> Before this error, julia wrote some warnings: >>>> >>>> WARNING: could not attach metadata for @simd loop. >>>> >>>> Same error I got on Ubuntu 16.04... >>>> >>>> >>>> >>>> Dňa piatok, 6. mája 2016 15:48:19 UTC+2 Jeff Bezanson napísal(-a): >>>>> >>>>> That command line in build_sysimg.jl:77 looks strange. Actually I >>>>> can't find that line anywhere; our build_sysimg and BuildExecutable.jl >>>>> now have something slightly different. >>>>> >>>>> On Fri, May 6, 2016 at 9:25 AM, Tom Breloff <t...@breloff.com> wrote: >>>>> > Also, I think there's even fewer people that are experts on the >>>>> Windows >>>>> > build process. I think the community tends to be more linux/osx >>>>> focused. >>>>> > >>>>> > On Fri, May 6, 2016 at 4:08 AM, Andreas Lobinger <lobi...@gmail.com> >>>>> >>>>> > wrote: >>>>> >> >>>>> >> Hello colleague, >>>>> >> >>>>> >> this topic is still seen as experimental and not that many of julia >>>>> users >>>>> >> could be considered expert on this... >>>>> >> If the recipe given (long time ago i tried to follow this on a >>>>> linux >>>>> >> installation which i general has more tooling to get shared >>>>> libraries and >>>>> >> compilation working...) doesn't work, you could raise a concrete >>>>> issue on >>>>> >> github - there you get more audience with julia internal know-how. >>>>> >> >>>>> >> Wishing a happy day, >>>>> >> >>>>> >> Andreas >>>>> >> >>>>> >> >>>>> >> On Friday, May 6, 2016 at 8:51:47 AM UTC+2, Ján Adamčák wrote: >>>>> >>> >>>>> >>> Nobody??? >>>>> >>> >>>>> >>> Dňa pondelok, 2. mája 2016 11:30:11 UTC+2 Ján Adamčák napísal(-a): >>>>> >>>> >>>>> >>>> >>>>> >>>> Hello, >>>>> >>>> >>>>> >>>> Trying to create an executable from Julia source, there are >>>>> questions >>>>> >>>> that raised... The process of exporting functions wasn't >>>>> successful, >>>>> >>>> function(s) was not exported to dll, and even the generated dll >>>>> cant be >>>>> >>>> loaded in c++ code. Below is the process explained in details: >>>>> >>>> >>>>> >>>> Can anybody bring more insight, how to build a standalone >>>>> executable >>>>> >>>> from Julia source? >>>>> >>>> >>>>> > >>>>> >>>>