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

标签 c++ visual-studio julia

是否可以在 C++ 中使用 julia 语言?
Julia 语言是否提供了一些库来包含?

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

提前致谢。

最佳答案

嵌入 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

同样,嵌入 Julia 的所有必要符号都位于 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,然后 制作 将照顾其余的。

使用 初始化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 的最后一条评论现在是最好的评论,因为通过 MSYS2 的 git 优于基于旧版的 git-bash MSYS .

海湾合作委员会

现在 MSYS2 确实提供了 gcc ,但您不能使用它,因为它隐式地使用了不同于 Julia (Winthreads) 使用的线程模型 (POSIX),而您必须从 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

展望 future

如果你成功地创建了一个适合从源代码编译 Julia 的编译环境——你可以通过实际编译 Julia 来验证这一点——那么上面的指令包括 julia-config.jl/Makefile 简化将起作用,并将生成一个嵌入的程序Julia 并且将是一个 .exe,即使在 之外调用也能正常工作MSYS2 ,这很好。

但如果您想使用 MSVC 直接,然后我应该警告你用 编译 Julia MSVC 仍处于早期阶段,因此上述方法与 MSVC 代替 gcc 目前不会工作,但有可能 利比亚 可以链接到;预计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 > output
  • 将输出转换为 .def 通过删除无关文本并放置 导出 在顶部的时间详细描述here
  • 使用 lib 创建一个 .lib 来自 .def .
    lib /def:libjulia.def /out:libjulia.lib /machine:x64
  • 将 libjulia.lib 与 libjulia.dll 放在同一目录
  • 通过包含 julia.h 和链接到 libjulia.lib 来构建项目
  • 关于c++ - 如何在 c++ (visual studio) 中使用 julia 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28967489/

    相关文章:

    c++ - 帮助理解生成的部分汇编代码

    c++ - 使用分配器的 new 和 delete 等同于什么?

    c++ - 为什么不同的CPU对执行相同的代码需要不同的时间

    c# - 代码覆盖率是否包含在 Visual Studio Team Services (Visual Studio Online) 包中

    random - 有没有办法获取随机数生成器的状态?

    oop - 分配对象引用而不是对象

    c++ - std::priority_queue::pop 什么时候可以抛出异常

    visual-studio - Web 部署项目在 Visual Studio 2012 中仍然可用吗?

    C++Boost.ASIO : passing accepted TCP connection from one opened socket to another using Windows APIs ( while works with Linux APIs)?

    Julia:评估字典中的表达式