解决方法
是的Julia可以嵌入到Julia本身可用的所有平台上的C或C程序中,并且在所有情况下通用方法都是相同的,但特别是Windows中的嵌入更加困难,因为目前编译/嵌入的框架(gcc)不是该平台(MSVC)的默认熟悉的一个.原因是Julia是使用gcc而不是MSVC在Windows上构建的.
高水平
在高层次上,嵌入Julia的步骤包括使用Julia发行版提供的资源进行编译(见下文),然后初始化程序以启动Julia引擎.
包括julia.h
c或c程序的所有必要定义都位于julia.h中.它的确切位置因每个分布而异,但一般来说它位于julia-basedir / include中.
链接到libjulia
同样,嵌入朱莉娅的所有必要符号都位于libjulia中.在OS / X和Linux上libjulia.so通常在julia-basedir / julia / lib中可用,而在Windows上libjulia.dll将是julia-basedir / julia / bin.
或者可选地在0.4中:使用julia-config.jl
前面可能听起来很混乱,但幸运的是,最新的Julia 0.4发行版中包含一个名为julia-config.jl的脚本,它将自动提供所有需要的编译器标志 – 免责声明我写的.在这种情况下,您需要做的就是剪切和粘贴并遵循文档中的模式,创建一个Makefile,make将负责其余的工作.
使用jl_init初始化
如in the docs所述,使用jl_init启动Julia运行时,同时可选地指定Julia编译的基本支持sys.ji所在的目录.我发现最好直接指定它而不是默认; julia-config.jl还提供-DJL_INIT_DIR,可以盲目地用作jl_init的参数;文档提供了详细信息.
Windows的问题
回到Windows.如果按照compiling Julia in Windows的说明进行操作,最终将得到MSYS2编译环境.请注意,这些说明有些过时,MSYS2从那时起已经发展,因此现在更简单(例如,不需要使用7-zip).顺便说一句,这也允许你获得git directly – 注意@ ntzrmtthihu777的最后一个评论现在是最好的,因为git通过MSYS2优于git-bash,它基于旧的MSYS.
GCC
现在MSYS2确实提供了一个gcc,但是你不能使用它,因为它隐含地使用了与Julia(Winthreads)使用的线程模型(POSIX)不同的线程模型,而你必须从mingw-builds获得gcc,这样你就可以选择在安装过程中选择模型;这也是Julia编译窗口自述文件所指出的,但它需要重复.其他工具可以从MSYS2包管理器pacman获得.
Mingw build提供了一个安装程序,我发现以下fstab足以使mingw-builds gcc在正确的位置可用:
none / cygdrive binary,posix=0,noacl,user 0 0 c:/mingw-w64/x86_64-4.9.2-win32-seh-rt_v3-rev1/mingw64 /mingw64 ntfs binary,auto 0 0
超越
如果您成功创建了一个适合从源代码编译Julia的编译环境 – 您可以通过实际编译Julia来验证这一点 – 那么上面的说明包括julia-config.jl / Makefile简化将起作用,并将生成一个嵌入的程序Julia将是一个.exe,即使在MSYS2之外调用也会工作,这很好.
但是如果你想直接使用MSVC,那么我应该警告你,Julia与MSVC的编译仍处于早期阶段,所以上面用MSVC代替gcc的方法目前还不行,但是libjulia有可能被联系到;预计至少libraries created by mingw are usable by MSVC.
更新了MSVC编译(创建julialib.lib)
libjulia.dll是包含嵌入Julia所需的所有符号的库,此外,虽然它是由gcc创建的,但它可以被MSVC使用,因为所有这些符号都有C命名,并且不是C名称错位.但是,它不能直接使用,但需要创建.lib.这可以通过以下方式完成.
创建julialib.lib
>使用dumpbin将符号从dll导出到文件中,例如:
dumpbin / exports libjulia.dll>产量
>将输出转换为.def文件,方法是删除无关文本并将EXPORTS置于最顶层,详见here
>使用lib从.def创建.lib.
lib /def:libjulia.def /out:libjulia.lib / machine:x64>将libjulia.lib放在与libjulia.dll相同的目录中>通过包含julia.h并链接到libjulia.lib来构建项目