如何在C ++中使用julia语言(Visual Studio)

伊夫

是否可以在c ++中使用julia语言?茱莉亚语言是否提供一些库来包括?

现在,我正在尝试在我的c ++项目中使用julia语言的一些功能。这有可能吗?我能做什么?

提前致谢。

瓦特姆

嵌入朱莉娅

是的,Julia可以嵌入到Julia本身可用的所有平台上的C或C ++程序中,并且在所有情况下,通用方法都相同,但是特别是Windows中的嵌入变得更加困难,因为当前用于编译/嵌入的框架(gcc)不是该平台(MSVC的默认默认熟悉版本原因是Julia是使用gcc而不是MSVC在Windows上构建的

高水平

在较高层次上,嵌入Julia的步骤包括使用Julia发行版提供的资源进行编译(请参见下文),然后初始化程序以启动Julia引擎。

包括julia.h

ac或c ++程序的所有必需定义都位于julia.h中每种发行版的确切位置都不同,但通常位于基于julia-basedir / include的位置。

链接到libjulia

同样,嵌入Julia的所有必需符号都位于libjulia中。在OS / X和Linux libjulia.so将在一般可用朱莉娅- BASEDIR /朱莉娅/ lib中,而在Windows libjulia.dll朱莉娅- BASEDIR /朱莉娅/箱。

或可选地在0.4中:使用julia-config.jl

以前的版本可能听起来很混乱,但是幸运的是,最新的Julia 0.4发行版中包含一个名为julia-config.jl的脚本,它将自动提供所有需要的编译器标志-免责声明我写了它在这种情况下,您要做的就是剪切并粘贴并按照文档中的模式进行操作,创建一个Makefile,然后make将负责其余的工作。

使用jl_init初始化

docs中所述,使用jl_init启动Julia运行时,同时可以选择指定Julia编译基础支持sys.ji所在的目录我发现最好直接指定它而不是让它默认。julia-config.jl还提供了-DJL_INIT_DIR,可以将其盲目用作jl_init的参数;该文档提供了详细信息。

Windows的问题

返回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使用

更新了MSVC编译(创建julialib.lib)

libjulia.dll是一个库,其中包含嵌入Julia所需的所有符号,此外,尽管它是由gcc创建的,但MSVC仍可以使用它,因为所有这些符号都具有C命名功能,并且不会被C ++命名。但是,它不能直接使用,而是需要创建一个.lib可以通过以下方式完成。

创建julialib.lib

  1. 使用dumpbin将符号从dll导出到文件中,例如:

    dumpbin /exports libjulia.dll > output

  2. 变换输出到一个.DEF通过去除多余的文本,并把文件EXPORTS在时顶部,详细描述在这里

  3. 使用lib.def创建一个.lib

    lib /def:libjulia.def /out:libjulia.lib /machine:x64

  4. 将libjulia.lib与libjulia.dll放在同一目录中

  5. 通过包含julia.h构建项目并链接到libjulia.lib

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Visual Studio(C#)中使用WebView功能

如何在 Visual Studio 2019 中使用 C#10

如何在Visual Studio中使用“参数”运行C程序

如何在Visual Studio中使用PhoneGap

如何在Visual Studio中使用IntelliCode?

如何在Visual Studio中使用Startswith

使用Visual Studio在C ++中嵌入Julia

如何在WinForm和C#(Visual Studio 2015)中使用.Net Native?

如何在 Visual Studio 中使用 OpenCV Nuget 包发布我的 C# 项目?

如何在Ubuntu中使用Visual Studio Code编译C ++代码?

如何在Visual Studio 2010中使用C#加载rpt文件?

如何在Visual Studio 2017中使用C#8?

如何在Visual Studio 2015中使用Clang为Windows编译C ++

如何在Visual Studio 2010中使用DEF文件从现有C ++代码生成DLL

如何在Visual Studio中使用C#中其他文件中的类?

如何在Visual Studio 2015中使用C#7?

如何在.NET Core,C#6和Visual Studio 2015中使用本地IIS?

如何在Visual Studio解决方案中使用class属性来检查C#?

如何在Visual Studio中使用c#创建SQLite数据库?

如何在Visual Studio 2015中使用roslyn C#编译器?

如何在Visual Studio 2017(C ++)中使用Chromium嵌入式框架?

如何在Visual Studio 2017 [C ++]中使用GLOP线性求解器

如何在 Visual Studio 2017、C++、CMake 中使用数据断点?

如何在Visual Studio Code中使用Typescript进行TDD?

如何在Visual Studio Code中使用Cmder?

如何在Visual Studio的发布后事件中使用msbuild?

如何在Visual Studio Code中使用全局gitignore?

如何在Visual Studio Code中使用Qt?

如何在Visual Studio 2017中使用Qt库?