I successfully build libcxxwrap_julia
from source on Windows using
cmake -DJulia_EXECUTABLE="home/AppData/Local/Programs/Julia-1.6.3/bin/julia" .. -G "Visual Studio 16"
cmake --build . --config=Release
and have added an Overrides.toml
file in the .julia/arctifacts
folder
[3eaa8342-bff7-56a5-9981-c04077f7cee7]
libcxxwrap_julia = "C:/Users/rrhie/Documents/cpp-test/libcxxwrap-julia/build"
When I open julia in the REPL
, add and use CxxWrap
I get the following error
julia> using CxxWrap
ERROR: InitError: could not load library
"C:\Users\rrhie\.julia\artifacts\41b86dcf7a6b239850cbbc378d7eaa5a87d7e4f3\bin\libcxxwrap_julia_stl.dll"
The specified procedure could not be found.
Stacktrace: ...
It seems like CxxWrap
is not using my locally compiled version of libcxxwrap_julia
.
What am I doing wrong here?
1 Like
I just got it working. Apparently the Overrides.toml file was not correct, although I followed the instructions on libcxxwrap-julia
The contents of Overrides.toml that work are:
41b86dcf7a6b239850cbbc378d7eaa5a87d7e4f3 = "C:/Users/rrhie/Documents/cpp-test/libcxxwrap-julia/build"
So I used the content hash directly.
I will open an issue on libcxxwrap-julia
to adapt the installation instructions in their README.
1 Like
Hi @hiemstar , Thank you for the above it is helpful. I had the same error message that you have.
Changing the contents of Overrides.toml seemed to make it work however I got another error message after installing CxxWrap
:
(@v1.7) pkg> add CxxWrap
Updating registry at `C\Users\gitboy\.julia\registries\General.toml`
Resolving package versions...
Downloaded artifact: libcxxwrap_julia
Downloaded artifact: libcxxwrap_julia
Updating `C\Users\gitboy\.julia\environments\1.7\Project.toml`
[1f15a43c] + CxxWrap v0.12.0
Updating `C\Users\gitboy\.julia\environments\1.7\Manifest.toml`
[1f15a43c] + CxxWrap v0.12.0
[1914dd2f] + MacroTools v0.5.9
[3eaa8342] +libcxxwrap_julia_jll v0.9.0+0
Info packages marked with not downloaded, use `instantiate` to download
Downloaded artifact: libcxxwrap_julia
Downloaded artifact: libcxxwrap_julia
julia> using CxxWrap
ERROR: InitError: Artifact "libccxwrap_julia" was not installed correctly. Try `using Pkg; Pkg.instantiate()` to re-install all missing resources.
Stacktrace:
[1] error(s::String)
@Base .\error.jl:33
[2] _artifact_str ...etc
julia> using Pkg; Pkg.instantiate()
Downloaded artifact: libcxxwrap_julia
Downloaded artifact: libcxxwrap_julia
julia> using CxxWrap
Error: InitError: could not load library ""
The parameter ia incorrect.
Stacktrace:
[1] libcxxwrapversion()
@ CxxWrap.CxxWrapCore C:\Users\gitboy\.julia\packages\CxxWrap\ptbgM\src\CxxWrap.jl:33
during initialization of module CxxWrapCore
julia>
Any idea how I can solve this? Thank you
Fyi similar issue here: Ccall c++ sort vector of String - #33 by barche
Are you building libcxxwrap-julia from source? On windows you cannot use the one provided by CxxWrap.
Yes I am building it from sources.
Would you be able to give the exact list of windows command you run from the very beginning (including the git clone …etc) because I had to change your first command from:
cmake -DJulia_EXECUTABLE="home/AppData/Local/Programs/Julia-1.6.3/bin/julia" .. -G "Visual Studio 16"
To
cmake -G "Visual Studio 16" -DJulia_EXECUTABLE="D:/Julia-1.7.1/bin/julia" .
In order to make it work.
I also had to change the hash in the toml file because mine is different. Thank you
Here are all the steps:
git clone https://github.com/JuliaInterop/libcxxwrap-julia.git
cd .\libcxxwrap-julia\
mkdir build
cd .\build\
cmake -DJulia_EXECUTABLE="C:\Users\rrhie\AppData\Local\Programs\Julia-1.6.3\bin\julia" .. -G "Visual Studio 16"
cmake --build . --config=Release
ctest . -C Release
The last line tests if the library is build correctly and if CxxWrap can find libcxxwrap-julia
Test project C:/Users/rrhie/Documents/julia-projects/libcxxwrap-julia/build
Start 1: test_module
1/3 Test #1: test_module ...................... Passed 1.32 sec
Start 2: test_type_init
2/3 Test #2: test_type_init ................... Passed 1.31 sec
Start 3: test_cxxwrap
3/3 Test #3: test_cxxwrap ..................... Passed 39.59 sec
100% tests passed, 0 tests failed out of 3
1 Like
Btw, make sure Julia doesn’t use some old cached version of CxxWrap
. In that case CxxWrap
may use the wrong path to libcxxwrap-julia
. This can be done by removing .julia\packages\CxxWrap
.
Subsequently do a clean install of CxxWrap.jl
using Pkg.add(CxxWrap)
1 Like
Yes that is the issue I had, it was using a old cached veraion of CxxWrap. Thank you for the help.