是否可以在C++中使用Julia语言?Julia语言是否提供了一些可包含的库?
目前,我正在尝试在我的C++项目中使用Julia语言的某些函数。这是可能的吗?我该怎么做?
先行致谢。
是否可以在C++中使用Julia语言?Julia语言是否提供了一些可包含的库?
目前,我正在尝试在我的C++项目中使用Julia语言的某些函数。这是可能的吗?我该怎么做?
先行致谢。
是的,Julia可以被嵌入到C或C++程序中,在所有支持Julia本身的平台上都可以这样做,而且通常的方法是相同的。但是特别需要注意的是,在Windows平台上的嵌入比较困难,因为目前编译/嵌入框架(gcc)不是该平台的默认熟悉框架(MSVC)。原因是Julia在Windows上使用的是gcc而不是MSVC。
从高层次来看,嵌入Julia的步骤包括使用Julia分发的资源进行编译(参见下文),然后初始化程序以启动Julia引擎。
无论是c还是c++程序所需的所有定义都位于中。它的确切位置因每个发布版而异,但通常位于/include中。
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仍处于早期阶段,因此上述使用gcc替换为MSVC的方法目前不起作用,但有可能链接到libjulia;至少预计由mingw创建的库可被MSVC使用。
libjulia.dll是包含所有嵌入Julia所需符号的库,虽然它由gcc创建,但由于所有这些符号都具有C命名,而不是C++名称修饰,因此可以被MSVC使用。但是,它不能直接使用,需要创建一个.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相同的目录中。
waTeim的回答是正确的,请投票支持!我只想加强一下,在你的Visual Studio项目中使用该库的步骤。以下假设libjulia.lib在Julia的bin
子文件夹中,并且您需要一个64位应用程序。我在Visual Studio 2013中完成。
首先,如果还没有设置64位解决方案/项目,请选择/单击/检查以下内容:
然后设置项目的配置:
所有配置
,平台=x64
PATH=$(JULIA_HOME);$(PATH)
$(JULIA_HOME)\..\include\julia
$(JULIA_HOME)
libjulia.lib
添加到列表中确保您的活动配置是平台x64
,然后构建解决方案。在我的情况下,它起作用了,希望它对您也有用 :)