It looks like there might be a parser ambiguity when the arguments are given as a tuple (the whole thing is parsed as keyword argument to the macro call).
Either of the following will work right now: @Base.ccallable Int64 foo(x::Int64) = x+1 @Base.ccallable(Int64, function foo(x::Int64) x+1 end) Please file a bug report with the signature you tried. On Thu, May 19, 2016 at 10:51 AM, Ján Adamčák <jadam...@gmail.com> wrote: > Thanks @Jameson > > The problem with @ccallable is, I get following error(Version > 0.5.0-dev+4124 (2016-05-16 22:35 UTC)): > > julia> @Base.ccallable (Int64, foo(x::Int64) = x+1) > ERROR: expected method definition in @ccallable > in eval(::Module, ::Any) at .\boot.jl:226 > > Thanks > > Dňa streda, 18. mája 2016 18:46:31 UTC+2 Jameson napísal(-a): >> >> You might need to be more specific than "doesn't work"; I tried it last >> week and it worked for me. The usage is essentially the same (the macro in >> v0.5 takes an extra argument of the return type, but the deprecation >> warning should note this already). >> >> On Wed, May 18, 2016 at 7:59 AM Ján Adamčák <jada...@gmail.com> wrote: >> >>> Thanks @Jameson >>> >>> Do you have an idea, how the compilation will work on v0.5 release? I >>> have tried with recent commits of master, but @ccallable doesn't work. >>> >>> >>> >>> Dňa sobota, 14. mája 2016 1:17:45 UTC+2 Jameson napísal(-a): >>>> >>>> > without jl_init() >>>> >>>> That is not implemented at this time, although patches are welcome. >>>> >>>> > it has something to do with ccallable >>>> >>>> Yes, it also is orthogonal to compile-all. It is possible that >>>> compile-all is non-functional on v0.4 on Windows, I know master has many >>>> enhancements, which may have included more stable Windows support. I >>>> suggest playing with these two options independently before jumping into >>>> combining them. >>>> >>> On Fri, May 13, 2016 at 2:39 PM Ján Adamčák <jada...@gmail.com> wrote: >>>> >>>>> Thanks @Jameson, >>>>> >>>>> >>>>> I have successfully built .so with "--compile=all" flag on 0.5-dev on >>>>> ubuntu 16.04, but my .so library is 110MB. The same compilation on >>>>> Win10 crashes. I can call >>>>> >>>>> my function in c++ code using jl_init and jl_get_function. >>>>> >>>>> >>>>> My primary goal is to compile a dll with my own exported function, >>>>> which I can call without jl_init(). I think it has something to do with >>>>> ccallable, which you have mentioned. I'm stacked at this point. Could you >>>>> please explain in more details, or point me to Julia code, how to move >>>>> forward? >>>>> >>>>> >>>>> Thanks in advance. >>>>> >>>>> -jan >>>>> >>>>> Dňa piatok, 13. mája 2016 4:30:41 UTC+2 Jameson napísal(-a): >>>>>> >>>>>> 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 <jada...@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? >>>>>>>>>>> >>>> >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>>