JuliaGraphics / jlqml

C++ component of the QML.jl package

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

compile error for jlqml on Windows

Ph0non opened this issue · comments

Creating a project for Visual Studio 2019 works:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="C:\Users\Martin\.julia\packages\CxxWrap\Extwp\deps\usr\lib\cmake\JlCxx;C:\Qt\5.13.2\msvc2017_64;C:\Users\Martin\AppData\Local\Julia-1.3.0" -S "C:\Users\Martin\jlqml"
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.18363.
-- Found Julia executable: C:/Users/Martin/AppData/Local/Julia-1.3.0/bin/julia.exe
-- Julia_VERSION_STRING: 1.3.0
-- Julia_INCLUDE_DIRS:   C:\\Users\\Martin\\AppData\\Local\\Julia-1.3.0\\include\\julia
-- Julia_LIBRARY_DIR:    C:\\Users\\Martin\\AppData\\Local\\Julia-1.3.0\\bin
-- Julia_LIBRARY:        C:/Users/Martin/AppData/Local/Julia-1.3.0/lib/libjulia.dll.a
-- JULIA_HOME:           C:\\Users\\Martin\\AppData\\Local\\Julia-1.3.0\\bin
-- Julia_LLVM_VERSION:   v6.0.1
-- Julia_WORD_SIZE:      64
-- Found Julia: C:/Users/Martin/AppData/Local/Julia-1.3.0/lib/libjulia.dll.a (found version "1.3.0")
-- Found JlCxx at C:/Users/Martin/.julia/packages/CxxWrap/Extwp/deps/usr/bin
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/Martin/jlqml-build

But building the project fails with

C:\Users\Martin\jlqml\type_conversion.hpp(32,19): error C2988: Unerkannte Vorlagendeklaration/-definition
C:\Users\Martin\jlqml\type_conversion.hpp(32,19): error C2143: Syntaxfehler: Es fehlt ";" vor "<"
C:\Users\Martin\jlqml\type_conversion.hpp(32,1): error C2913: Explizite Spezialisierung; "jlcxx::IsImmutable" ist keine Spezialisierung einer Klassenvorlage
C:\Users\Martin\jlqml\type_conversion.hpp(32,19): error C2059: Syntaxfehler: "<"
C:\Users\Martin\jlqml\type_conversion.hpp(32,37): error C2059: Syntaxfehler: "Funktionsformatsumwandlung"
C:\Users\Martin\jlqml\type_conversion.hpp(33,1): error C2143: Syntaxfehler: Es fehlt ";" vor "{"
C:\Users\Martin\jlqml\type_conversion.hpp(33,1): error C2447: "{": Funktionsheader fehlt - Parameterliste im alten Stil?

and some other errors, see jlqml.log
The used standard is c++17. The master version of CxxWrap.jl is installed and compiled via Pkg.

julia> versioninfo()
Julia Version 1.3.0
Commit 46ce4d7933 (2019-11-26 06:09 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: AMD Ryzen 5 2500U with Radeon Vega Mobile Gfx  
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, znver1)
Environment:
  JULIA_EDITOR = "C:\Users\Martin\AppData\Local\Programs\Microsoft VS Code\Code.exe"

Sorry for the late reply. The problem is that jlqml wasn't updated yet for the master version of libcxxwrap-julia. I just pushed my changes to both QML.jl and jlqml, so now it should work if you build both jlqml and libcxxwrap-julia from source.

Thanks for your quick changes. Unfortunately I now have the problem that I cannot load the created jlqml.dll in julia.

C:\Users\Martin\Projekte\Builds\libcxxwrap-build>cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="C:\Users\Martin\AppData\Local\Julia-1.3.1" -S "C:\Users\Martin\Projekte\Builds\libcxxwrap-julia"
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.18363.
-- The C compiler identification is MSVC 19.24.28314.0
-- The CXX compiler identification is MSVC 19.24.28314.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Julia executable: C:/Users/Martin/AppData/Local/Julia-1.3.1/bin/julia.exe
-- Julia_VERSION_STRING: 1.3.1
-- Julia_INCLUDE_DIRS:   C://Users//Martin//AppData//Local//Julia-1.3.1//include//julia
-- Julia_LIBRARY_DIR:    C:/Users/Martin/AppData/Local/Julia-1.3.1/lib
-- Julia_LIBRARY:        C:/Users/Martin/AppData/Local/Julia-1.3.1/lib/libjulia.dll.a
-- JULIA_HOME:           C:\\Users\\Martin\\AppData\\Local\\Julia-1.3.1\\bin
-- Julia_LLVM_VERSION:   v6.0.1
-- Julia_WORD_SIZE:      64
-- Found Julia: C:/Users/Martin/AppData/Local/Julia-1.3.1/lib/libjulia.dll.a (found version "1.3.1")
-- JlCxx version: v0.6.6
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Failed
-- Performing Test COMPILER_HAS_DEPRECATED
-- Performing Test COMPILER_HAS_DEPRECATED - Success
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_BUILD_TYPE

-- Build files have been written to: C:/Users/Martin/Projekte/Builds/libcxxwrap-build

I build libcxxwrap in Visual Studio 2019 as release version for x64, added ENV["JLCXX_DIR"] = "C:\\Users\\Martin\\Projekte\\Builds\\libcxxwrap-build" in julia and pkg> build CxxWrap with the latest master of CxxWrap.jl.

Next I cmake jlqml

C:\Users\Martin\Projekte\Builds\jlqml-build>cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="C:\Users\Martin\Projekte\Builds\libcxxwrap-build;C:\Qt\5.13.2\msvc2017_64;C:\Users\Martin\AppData\Local\Julia-1.3.1" -S "C:\Users\Martin\Projekte\Builds\jlqml"
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.18363.
-- The C compiler identification is MSVC 19.24.28314.0
-- The CXX compiler identification is MSVC 19.24.28314.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Julia executable: C:/Users/Martin/AppData/Local/Julia-1.3.1/bin/julia.exe
-- Julia_VERSION_STRING: 1.3.1
-- Julia_INCLUDE_DIRS:   C://Users//Martin//AppData//Local//Julia-1.3.1//include//julia
-- Julia_LIBRARY_DIR:    C:/Users/Martin/AppData/Local/Julia-1.3.1/lib
-- Julia_LIBRARY:        C:/Users/Martin/AppData/Local/Julia-1.3.1/lib/libjulia.dll.a
-- JULIA_HOME:           C:\\Users\\Martin\\AppData\\Local\\Julia-1.3.1\\bin
-- Julia_LLVM_VERSION:   v6.0.1
-- Julia_WORD_SIZE:      64
-- Found Julia: C:/Users/Martin/AppData/Local/Julia-1.3.1/lib/libjulia.dll.a (found version "1.3.1")
-- Found JlCxx at C:/Users/Martin/Projekte/Builds/libcxxwrap-build/bin/Debug
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_BUILD_TYPE

-- Build files have been written to: C:/Users/Martin/Projekte/Builds/jlqml-build

There is no folder Found JlCxx at C:/Users/Martin/Projekte/Builds/libcxxwrap-build/bin/Debug only Release. I copied the files from Release to a new folder Debug und also compiled jlqml as Release with x64 in Visual Studio 2019 without Errors (but some warnings) and added the path as described to julia ENV

After a few attempts, I found out that for `build QML' libjlqml.dll is expected instead of jlqml.dll and this is copied to the subfolder bin and renamed. However, the corresponding dll cannot be loaded into julia.

julia> Libdl.dlopen("C:\\Users\\Martin\\Projekte\\Builds\\jlqml-build\\Release\\jlqml.dll")
ERROR: could not load library "C:\Users\Martin\Projekte\Builds\jlqml-build\Release\jlqml.dll"

Stacktrace:
 [1] #dlopen#3(::Bool, ::typeof(dlopen), ::String, ::UInt32) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.3\Libdl\src\Libdl.jl:109
 [2] dlopen at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.3\Libdl\src\Libdl.jl:109 [inlined] (repeats 2 times)
 [3] top-level scope at REPL[2]:1

This should work now, at least with Julia 1.3 and if libcxxwwrap-julia is also compiled with MSVC. Newer versions of Julia don't work because of JuliaLang/julia#34201