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? 
> >> >>>>>> >>>> 
> >> >>>>>> > 
>

Reply via email to