记录一下windows平台中,使用vs2022+julia实现在julia中调用c++库的全流程。
julia调用c++库主要有两种方案:Cxx.jl和CxxWrap.jl,两者都可以在github中找到对应项目。它们之间的区别在于:Cxx.jl需要在julia端构建接口,而CxxWrap.jl则完全在c++端构建接口。由于Cxx.jl依赖项LLVM有版本依赖问题,一直编译不通过,所以采用CxxWrap方案:CxxWrap地址。参考链接地址中的README,下面是具体流程:
1. julia的预先处理:
1.1 在julia终端的pkg中运行add CxxWrap
(julia终端中键入]
可进入包管理模块)
pkg> add CxxWrap
1.2 编译libcxxwrap-julia项目前的处理:libcxxwrap-julia地址:
说明:julia的CxxWrap模块是依赖于libcxxwrap-julia才可以运行的。在该项目的README中可以发现该库有预编译的版本,但是是基于gcc编译器的,所以我们需要下载源码,用cmake进行项目构建,然后自己在vs中编译该项目。但是在构建该项目之前,我们需要在julia里面做一些处理,把默认的版本代码删除,具体步骤如下:
- 在julia终端中输入(注意第一个命令是在包管理模块):
pkg> develop libcxxwrap_julia_jl
julia> import libcxxwrap_julia_jll
julia> libcxxwrap_julia_jll.dev_jll()
- 运行2.1命令后,如图中红色框所示为libcxxwrap_julia_jll的地址,进入该目录后,可以发现有一个override子文件夹,我们需要子文件夹override的内容全部删除,然后将该目录作为cmake项目生成目录,替换成自己的内容。
2.使用cmake构建项目
2.1 下载源码
2.2 打开cmake-gui
- 源码路径设置为下载代码的路径,生成路径为步骤1中的override子文件夹
- 在cmake中添加变量Julia_PREFIX,该路径为julia的地址,请注意一定要和你需要使用的julia版本一致。你可以在你的电脑上搜索julia.exe,然后其上一级目录就是该路径(其中包含bin,include等一系列文件夹)
- Configure+Generete
3.使用Visual Studio编译项目
3.1 编译
- 打开ALL_BUILD的属性,确保使用C++17版本:配置属性-常规-c语言标准
- 完成编译后,右键INSTALL项目-生成。(如果提示set_local项目。退出VS后,使用管理员模式打开VS)
3.2 进行测试
- 新建一个vs工程,注意改成c++17标准
- 项目包含目录添加JLCxx安装位置的include