Thanks Yichao Yu, Your macro works fine.
So in the next step I tried the following flag: "--compile=all" during system image compilation. My userimg.jl: @Base.ccallable Int64 jl_foo(x::Int64) = (x+1) with the following C code: #include <julia.h> #include <stdio.h> #include <math.h> #include <time.h> int main(int argc, char *argv[]) { jl_options.compile_enabled = JL_OPTIONS_COMPILE_OFF; jl_options.startupfile = JL_OPTIONS_STARTUPFILE_OFF; jl_init_with_image(NULL, "libmyimg_all.dll"); jl_function_t *func = jl_get_function(jl_main_module, "jl_foo"); jl_value_t* argument = jl_box_int64(2); jl_value_t* ret = jl_call1(func, argument); if (jl_is_int64(ret)) { int64_t retInt64 = jl_unbox_int64(ret); printf("jl_foo(2) in C: %d\n", retInt64); } system("PAUSE"); int ret = 0; jl_atexit_hook(ret); return ret; } I got this message: C:\\Users\\Adam\\AppData\\Local\\Julia-0.5.0-dev1\\bin\\my_prog.exe code missing for Base.==(Base.#==, Base.Cstring, Ptr{Void}) sysimg may not have been built with --compile=all code missing for Base.==(Base.#==, Ptr{UInt8}, Ptr{Void}) sysimg may not have been built with --compile=all code missing for Base.pointer(Base.#pointer, Array{UInt8, 1}, UInt64) sysimg may not have been built with --compile=all code missing for Base.unsafe_convert(Base.#unsafe_convert, Type{Ptr{UInt8}}, Array{UInt8, 1}) sysimg may not have been built with --compile=all code missing for Base.-(Base.#-, UInt64, Int64) sysimg may not have been built with --compile=all code missing for Base.promote(Base.#promote, UInt64, Int64) sysimg may not have been built with --compile=all code missing for Base.elsize(Base.#elsize, Array{UInt8, 1}) sysimg may not have been built with --compile=all code missing for Base.+(Base.#+, Ptr{UInt8}, UInt64) sysimg may not have been built with --compile=all code missing for Base.rem(Base.#rem, UInt64, Type{UInt64}) sysimg may not have been built with --compile=all code missing for Base.oftype(Base.#oftype, Ptr{UInt8}, UInt64) sysimg may not have been built with --compile=all code missing for Base.convert(Base.#convert, Type{Ptr{UInt8}}, UInt64) sysimg may not have been built with --compile=all code missing for Base.convert(Base.#convert, Type{Ptr{Int32}}, Ptr{UInt8}) sysimg may not have been built with --compile=all code missing for Base.SparseArrays.CHOLMOD.set_print_level(Base.SparseArrays.CHOLMOD.#set_print_level, Array{UInt8, 1}, Int64) sysimg may not have been built with --compile=all code missing for Base.unsafe_store!(Base.#unsafe_store!, Ptr{Int32}, Int64) sysimg may not have been built with --compile=all jl_foo(2) in C: 3 Press any key to continue . . . Execution of my function was successful, but I think I found bug in --compile=all implementation: code missing for ... sysimg may not have been built with --compile=all What do you think??? Thanks. Dňa pondelok, 23. mája 2016 18:42:20 UTC+2 Yichao Yu napísal(-a): > > On Mon, May 23, 2016 at 12:09 PM, Ján Adamčák <jada...@gmail.com > <javascript:>> wrote: > > Thanks Yichao Yu, > > > > Can you tell me which macro did you mean and where to place it? > > You need -DJULIA_ENABLE_THREADING=1 when compiling the C/C++ code if > julia is built with threading enabled (which is the default now). > > > > > Thanks > > > > Dňa 23.5.2016 17:37 používateľ "Yichao Yu" <yyc...@gmail.com > <javascript:>> napísal: > > > >> > >> On May 23, 2016 10:30 AM, "Ján Adamčák" <jada...@gmail.com > <javascript:>> wrote: > >> > > >> > Thanks @Jameson, > >> > > >> > Another error I'm getting while compiling c example is > >> > > >> > C://Users//Adam//AppData//Local//Julia-0.5.0-dev//start_func.c:111: > >> > undefined reference to `__imp_jl_tls_states' > >> > collect2.exe: error: ld returned 1 exit status > >> > > >> > This error is caused by JL_GC_PUSH1(&x); > >> > >> Looks like you are missing threading enabling macro while building your > >> code > >> > >> > > >> > Is there some workaround or is it just a bug? > >> > > >> > Thanks. > >> > > >> > Dňa pondelok, 23. mája 2016 4:56:52 UTC+2 Jameson napísal(-a): > >> >> > >> >> I tried building a new system image on v0.4 starting from an > existing > >> >> sys.so library (as you tried below), and found that it failed with > the same > >> >> "Task cannot be serialized" error. So I guess that use case must > have been > >> >> fixed during v0.5 development. The workaround is to start with > inference.ji > >> >> and load all of the extra code through userimg.jl. That worked for > me (and > >> >> is just a bit slower for incremental development), so I didn't > investigate > >> >> further. > >> >> > >> >> > >> >> On Tuesday, May 10, 2016 at 4:13:57 PM UTC-4, Jameson wrote: > >> >>> > >> >>> 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? > >> >>>>>> >>>> > >> >>>>>> > >