如何在c ++中使用julia语言(visual studio)

时间:2015-03-10 15:18:58

标签: c++ visual-studio julia

是否可以在c ++中使用julia语言? julia语言是否提供了一些库?

目前,我正在尝试在我的c ++项目中使用julia语言的一些功能。 这可能吗?我该怎么办?

提前感谢。

2 个答案:

答案 0 :(得分:11)

嵌入Julia

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

高级

在最高级别,嵌入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 将是朱莉娅 - BASEDIR /朱莉娅/ 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使用的线程模型不同的线程模型(POSIX) (Winthreads)而你必须从mingw-builds获得gcc,它可以让你在安装过程中选择模型;这也是由朱莉娅编译窗口自述文件指出的,但它需要重复。其他工具可以从 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的程序,即使在 MSYS2 之外调用也会有效。这很好。

但是如果你想直接使用 MSVC ,那么我应该警告你,使用 MSVC 编译Julia仍处于早期阶段,所以上面的方法是 MSVC 替换 gcc 目前无效,但 libjulia 可能会被链接到;预计至少libraries created by mingw are usable by 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} }

  3. 使用lib从 .def 创建 .lib

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

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

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

答案 1 :(得分:2)

waTeim的回答是正确的,去投票吧!我只是想补充一下在Visual Studio项目中使用库的步骤。以下假设libjulia.lib位于Julia的bin子文件夹中,并且您需要64位应用程序。我是在Visual Studio 2013中完成的。

首先设置64位解决方案/项目(如果尚未完成)。选择/单击/检查以下内容:

  1. 构建/配置管理器
  2. 有源解决方案平台/新
  3. X64 /从Win32复制设置/创建新项目平台
  4. 然后设置项目的配置:

    1. 右键单击项目/属性
    2. 选择配置= All Configurations,平台= x64
    3. 调试/环境:PATH=$(JULIA_HOME);$(PATH)
    4. C / C ++ / General / Additional Include Directories:$(JULIA_HOME)\..\include\julia
    5. 链接器/常规/附加库目录:$(JULIA_HOME)
    6. 链接器/输入/附加依赖项:将libjulia.lib添加到列表
    7. 确保您的活动配置适用于平台x64,然后构建您的解决方案。它对我有用,希望它也适合你:)