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 <[email protected]
> <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" <[email protected]
> <javascript:>> napísal:
> >
> >>
> >> On May 23, 2016 10:30 AM, "Ján Adamčák" <[email protected]
> <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 <[email protected]>
> >> >>>>>> 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
> >> >>>>>> > <[email protected]>
> >> >>>>>> > 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?
> >> >>>>>> >>>>
> >> >>>>>> >
>