是否可以在c ++中使用julia语言?茱莉亚语言是否提供一些库来包括?
现在,我正在尝试在我的c ++项目中使用julia语言的一些功能。这有可能吗?我能做什么?
提前致谢。
是的,Julia可以嵌入到Julia本身可用的所有平台上的C或C ++程序中,并且在所有情况下,通用方法都相同,但是特别是Windows中的嵌入变得更加困难,因为当前用于编译/嵌入的框架(gcc)不是该平台(MSVC)的默认默认熟悉版本。原因是Julia是使用gcc而不是MSVC在Windows上构建的。
在较高层次上,嵌入Julia的步骤包括使用Julia发行版提供的资源进行编译(请参见下文),然后初始化程序以启动Julia引擎。
ac或c ++程序的所有必需定义都位于julia.h中。每种发行版的确切位置都不同,但通常位于基于julia-basedir / include的位置。
同样,嵌入Julia的所有必需符号都位于libjulia中。在OS / X和Linux libjulia.so将在一般可用朱莉娅- BASEDIR /朱莉娅/ lib中,而在Windows libjulia.dll将朱莉娅- BASEDIR /朱莉娅/箱。
以前的版本可能听起来很混乱,但是幸运的是,最新的Julia 0.4发行版中包含一个名为julia-config.jl的脚本,它将自动提供所有需要的编译器标志-免责声明我写了它。在这种情况下,您要做的就是剪切并粘贴并按照文档中的模式进行操作,创建一个Makefile,然后make将负责其余的工作。
如docs中所述,使用jl_init启动Julia运行时,同时可以选择指定Julia编译基础支持sys.ji所在的目录。我发现最好直接指定它而不是让它默认。julia-config.jl还提供了-DJL_INIT_DIR,可以将其盲目用作jl_init的参数;该文档提供了详细信息。
返回Windows。如果按照说明在Windows中编译Julia,则最终将得到MSYS2编译环境。请注意,这些说明有些过时,并且MSYS2从那时起已经有所改进,因此现在变得更简单(例如,不需要使用7-zip)。顺便说一句,这还允许您直接获取git-注意@ ntzrmtthihu777的最后评论现在是最好的,因为通过MSYS2的git优于基于旧MSYS的git-bash 。
现在,MSYS2确实确实提供了gcc,但是您不能使用它,因为它隐式使用的线程模型(POSIX)与Julia(Winthreads)使用的线程模型不同,相反,您必须从mingw-builds获得gcc,从而为您提供一个在安装过程中选择模型的选项;Julia编译窗口自述文件也指出了这一点,但是需要重复。其他工具可以从MSYS2软件包管理器pacman获得。
Mingw builds提供了安装程序,我发现以下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,noacl,auto 0 0
如果您成功创建了一个适合从源代码编译Julia的编译环境-您可以通过实际编译Julia来进行验证-那么上面的说明(包括julia-config.jl / Makefile简化)将起作用,并将生成一个嵌入程序Julia和它将是一个.exe,即使在MSYS2外部调用也可以正常工作。
但是,如果你正在寻找使用MSVC直接,那么我应该提醒你朱莉娅与编译MSVC仍然诠释早期阶段,所以用上述方法MSVC取代GCC目前不会工作,但存在的可能性,libjulia可能链接到 预期mingw创建的库至少可以被MSVC使用。
libjulia.dll是一个库,其中包含嵌入Julia所需的所有符号,此外,尽管它是由gcc创建的,但MSVC仍可以使用它,因为所有这些符号都具有C命名功能,并且不会被C ++命名。但是,它不能直接使用,而是需要创建一个.lib。可以通过以下方式完成。
使用dumpbin将符号从dll导出到文件中,例如:
dumpbin /exports libjulia.dll > output
变换输出到一个.DEF通过去除多余的文本,并把文件EXPORTS在时顶部,详细描述在这里
使用lib从.def创建一个.lib。
lib /def:libjulia.def /out:libjulia.lib /machine:x64
将libjulia.lib与libjulia.dll放在同一目录中
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句