3MFConsortium / gladius

Gladius is a viewer and editor for 3mf files using the volumetric extension.
BSD 2-Clause "Simplified" License
9 stars 1 forks source link

Build Fails in Visual Studio 2022 on Windows Due to lib3mf Inclusion Issues #1

Open BAM-AM opened 1 week ago

BAM-AM commented 1 week ago

Hello,

I have attempted multiple times to build and compile Gladius on a Windows 10 machine. My goal is to test the voxelization capabilities of Gladius. However, during the build process, I encountered issues related to the lib3mf library. It appears that my project setup may be incorrect, resulting in certain components of the library not being found.

I look forward to receiving feedback. Below is a detailed description of the steps I took and the errors I encountered.

For your information, I am a beginner in using Visual Studio to compile C++ applications and I currently rely on the debugging assistance of ChatGPT.

Steps to Reproduce:

Following Instructions

Editor View of lib3mf_2.3.2_x64-windows.list: x64-windows/ x64-windows/bin/ x64-windows/bin/lib3mf.dll x64-windows/bin/lib3mf.pdb x64-windows/debug/ x64-windows/debug/bin/ x64-windows/debug/bin/lib3mf.dll x64-windows/debug/bin/lib3mf.pdb x64-windows/debug/lib/ x64-windows/debug/lib/lib3mf.lib x64-windows/debug/lib/pkgconfig/ x64-windows/debug/lib/pkgconfig/lib3mf.pc x64-windows/include/ x64-windows/include/Bindings/ x64-windows/include/Bindings/C/ x64-windows/include/Bindings/C/lib3mf.h x64-windows/include/Bindings/C/lib3mf_types.h x64-windows/include/Bindings/CDynamic/ x64-windows/include/Bindings/CDynamic/lib3mf_dynamic.cc x64-windows/include/Bindings/CDynamic/lib3mf_dynamic.h x64-windows/include/Bindings/CDynamic/lib3mf_types.h x64-windows/include/Bindings/CSharp/ x64-windows/include/Bindings/CSharp/Lib3MF.csx x64-windows/include/Bindings/Cpp/ x64-windows/include/Bindings/Cpp/lib3mf_abi.hpp x64-windows/include/Bindings/Cpp/lib3mf_implicit.hpp x64-windows/include/Bindings/Cpp/lib3mf_types.hpp x64-windows/include/Bindings/CppDynamic/ x64-windows/include/Bindings/CppDynamic/lib3mf_abi.hpp x64-windows/include/Bindings/CppDynamic/lib3mf_dynamic.h x64-windows/include/Bindings/CppDynamic/lib3mf_dynamic.hpp x64-windows/include/Bindings/CppDynamic/lib3mf_types.hpp x64-windows/include/Bindings/Go/ x64-windows/include/Bindings/Go/cfunc.go x64-windows/include/Bindings/Go/lib3mf.go x64-windows/include/Bindings/Go/lib3mf_dynamic.cc x64-windows/include/Bindings/Go/lib3mf_dynamic.h x64-windows/include/Bindings/Go/lib3mf_impl.go x64-windows/include/Bindings/Go/lib3mf_types.h x64-windows/include/Bindings/NodeJS/ x64-windows/include/Bindings/NodeJS/binding.gyp x64-windows/include/Bindings/NodeJS/lib3mf_dynamic.cc x64-windows/include/Bindings/NodeJS/lib3mf_dynamic.h x64-windows/include/Bindings/NodeJS/lib3mf_nodeaddon.cc x64-windows/include/Bindings/NodeJS/lib3mf_nodewrapper.cc x64-windows/include/Bindings/NodeJS/lib3mf_nodewrapper.h x64-windows/include/Bindings/NodeJS/lib3mf_types.h x64-windows/include/Bindings/Pascal/ x64-windows/include/Bindings/Pascal/Unit_Lib3MF.pas x64-windows/include/Bindings/Python/ x64-windows/include/Bindings/Python/Lib3MF.py x64-windows/lib/ x64-windows/lib/lib3mf.lib x64-windows/lib/pkgconfig/ x64-windows/lib/pkgconfig/lib3mf.pc x64-windows/share/ x64-windows/share/lib3mf/ x64-windows/share/lib3mf/copyright x64-windows/share/lib3mf/lib3mfConfig.cmake x64-windows/share/lib3mf/usage x64-windows/share/lib3mf/vcpkg.spdx.json x64-windows/share/lib3mf/vcpkg_abi_info.txt


### Build Attempts 

#### First Attempt
##### Adjust Project Settings
- Opened gladius.sln and modified the properties:
- Set General Utility to Application ->Added C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\lib to Additional Library Directories.
- Set General Utility to Application ->Added LIB3MF_DLL to Preprocessor Definitions.
- Build Gladius 
##### Errors in Build 

C:\Users\Jonathan\source\repos\24-10-14_CMake_3MG_Gladius_Parrel_Attempt\gla dius\gladius\src\io\3mf\Importer3mf.h(12,10): error C1083: Cannot open inclu de file: 'lib3mf/Cpp/lib3mf_implicit.hpp': No such file or directory [C:\Use rs\Jonathan\source\repos\24-10-14_CMake_3MG_Gladius_Parrel_Attempt\gladius\g ladius\build\src\gladius_lib.vcxproj]

#### Second Attempt 
##### Adjust \gladius\gladius\src\io\3mf\Importer3mf.h 

replace #include <lib3mf/Cpp/lib3mf_implicit.hpp> by #include <Bindings/Cpp/lib3mf_implicit.hpp>

##### Errors in Build of Gladius 

C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(65,66): error C2039: 'PImplicitPort': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Application.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(65,66): error C2061: syntax error: identifier 'PImplicitPort' 2>(compiling source file '../../src/Application.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(83,36): error C2039: 'PVolumeData': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Application.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(83,36): error C2061: syntax error: identifier 'PVolumeData' 2>(compiling source file '../../src/Application.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(91,40): error C2039: 'PLevelSet': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Application.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(91,40): error C2061: syntax error: identifier 'PLevelSet' 2>(compiling source file '../../src/Application.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(107,62): error C2039: 'CImplicitFunction': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Application.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(107,62): error C2061: syntax error: identifier 'CImplicitFunction' 2>(compiling source file '../../src/Application.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(109,65): error C2039: 'CFunctionFromImage3D': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Application.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(109,65): error C2061: syntax error: identifier 'CFunctionFromImage3D' 2>(compiling source file '../../src/Application.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(113,37): error C2039: 'CImplicitFunction': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Application.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(113,37): error C2061: syntax error: identifier 'CImplicitFunction' 2>(compiling source file '../../src/Application.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(115,34): error C2039: 'CImplicitNode': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Application.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(115,34): error C2061: syntax error: identifier 'CImplicitNode' 2>(compiling source file '../../src/Application.cpp') 2>Document.cpp 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(65,66): error C2039: 'PImplicitPort': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Document.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(65,66): error C2061: syntax error: identifier 'PImplicitPort' 2>(compiling source file '../../src/Document.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(83,36): error C2039: 'PVolumeData': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Document.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(83,36): error C2061: syntax error: identifier 'PVolumeData' 2>(compiling source file '../../src/Document.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(91,40): error C2039: 'PLevelSet': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Document.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(91,40): error C2061: syntax error: identifier 'PLevelSet' 2>(compiling source file '../../src/Document.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(107,62): error C2039: 'CImplicitFunction': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Document.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(107,62): error C2061: syntax error: identifier 'CImplicitFunction' 2>(compiling source file '../../src/Document.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(109,65): error C2039: 'CFunctionFromImage3D': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Document.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(109,65): error C2061: syntax error: identifier 'CFunctionFromImage3D' 2>(compiling source file '../../src/Document.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(113,37): error C2039: 'CImplicitFunction': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Document.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(113,37): error C2061: syntax error: identifier 'CImplicitFunction' 2>(compiling source file '../../src/Document.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(115,34): error C2039: 'CImplicitNode': is not a member of 'Lib3MF' 2>(compiling source file '../../src/Document.cpp') 2> C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\build\vcpkg_installed\x64-windows\include\Bindings\Cpp\lib3mf_implicit.hpp(54,11): 2> see declaration of 'Lib3MF' 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Importer3mf.h(115,34): error C2061: syntax error: identifier 'CImplicitNode' 2>(compiling source file '../../src/Document.cpp') 2>C:\Users\Jonathan\source\repos\24-10-14_Cmake_3MF_GLADIUS\gladius\gladius\src\io\3mf\Writer3mf.h(12,10): error C1083: Cannot open include file: 'lib3mf/Cpp/lib3mf_implicit.hpp': No such file or directory 2>(compiling source file '../../src/Document.cpp')



# Setup Informations
- cl: Microsoft (R) C/C++ Optimizing Compiler Version 19.41.34123 for x86
- vcpkg version: vcpkg package management program version 2024-06-10-02590c430e4ed9215d27870138c2e579cc338772
- cmake --version: cmake version 3.31.0-rc1
- Visual Studio: Visual Studio 2022 Developer Command Prompt v17.11.5
3dJan commented 1 week ago

Hello BAM-AM, gladius uses a vcpkg overlay port to use the implicit branch of the lib3mf repository. In your case VCPKG_OVERLAY_PORTS is not set, so the overlay is not applied and the official vcpkg port is used instead. The changes for the volumetric extension are not in the master branch yet.

To use the overlay you may just extend your cmake generation command by a -D VCPKG_OVERLAY_PORTS =../vcpkg-overlay-ports. It might look something like cmake -G "Visual Studio 17 2022" -D CMAKE_BUILD_TYPE=Debug -D VCPKG_DEFAULT_TRIPLET=x64-windows -D VCPKG_ROOT=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg -D VCPKG_OVERLAY_PORTS =../vcpkg-overlay-ports -D CMAKE_C_COMPILER="C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\bin\Hostx64\x64\cl.exe" -D CMAKE_CXX_COMPILER="C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\bin\Hostx64\x64\cl.exe" ..

A more convenient way is to use one of the presets defined in CMakePresets.json, like x64-release for a windows release build. You can do that with the command cmake --preset x64-release -S ../ and cmake --build .

Many IDEs support the CMakePresets.json, e.g. you can just select the preset in Visual Studio or Visual Studio Code.

3dJan commented 1 week ago

There is also an installer: https://github.com/3MFConsortium/gladius/releases/tag/v1.2.9