是否可以在 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 /exports libjulia.dll > output
lib /def:libjulia.def /out:libjulia.lib /machine:x64
关于c++ - 如何在 c++ (visual studio) 中使用 julia 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28967489/