prusa3d / PrusaSlicer

G-code generator for 3D printers (RepRap, Makerbot, Ultimaker etc.)
https://www.prusa3d.com/prusaslicer/
GNU Affero General Public License v3.0
7.69k stars 1.93k forks source link

Linux: libslic3r/Format/3mf.cpp:2168:42: error: ‘mz_zip_writer_staged_context’ has not been declared #7080

Closed mkyral closed 3 years ago

mkyral commented 3 years ago

Version

all 2.4.0 alphas and current git (c921d6f9368af922cb3c4b209e3dadf94116f41c)

Operating system type + version

Gentoo linux, x11-libs/wxGTK-3.1.4, dev-libs/boost-1.76.0

Behavior

Compilation fails on:

[133/326] /usr/bin/x86_64-pc-linux-gnu-g++ -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_CHRONO_DYN_LINK -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_LOCALE_DYN_LINK -DBOOST_LOG_DYN_LINK -DBOOST_REGEX_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_THREAD_DYN_LINK -DLIBNEST2D_GEOMETRIES_libslic3r -DLIBNEST2D_OPTIMIZER_nlopt -DLIBNEST2D_STATIC -DLIBNEST2D_THREADING_tbb -DSLIC3R_GUI -DTBB_USE_CAPTURED_EXCEPTION=0 -DUNICODE -DUSE_TBB -DWXINTL_NO_GETTEXT_MACRO -D_UNICODE -DwxNO_UNSAFE_WXSTRING_CONV -DwxUSE_UNICODE -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -I/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src -Isrc/platform -I/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r -Isrc/libslic3r -I/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libnest2d/include -I/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/glu-libtess/include -isystem /usr/include/eigen3 -isystem /usr/include/miniz -isystem /usr/include/OpenEXR  -DNDEBUG -march=native -O2 -pipe -fext-numeric-literals -Wall -Wno-reorder -fPIC -fsigned-char -Werror=return-type -Wno-ignored-attributes -Wno-unknown-pragmas -pthread -DOPENVDB_ABI_VERSION_NUMBER=8 -std=gnu++17 -Winvalid-pch -include /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999_build/src/libslic3r/CMakeFiles/libslic3r.dir/cmake_pch.hxx -MD -MT src/libslic3r/CMakeFiles/libslic3r.dir/Format/3mf.cpp.o -MF src/libslic3r/CMakeFiles/libslic3r.dir/Format/3mf.cpp.o.d -o src/libslic3r/CMakeFiles/libslic3r.dir/Format/3mf.cpp.o -c /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp
FAILED: src/libslic3r/CMakeFiles/libslic3r.dir/Format/3mf.cpp.o 
/usr/bin/x86_64-pc-linux-gnu-g++ -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_CHRONO_DYN_LINK -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_LOCALE_DYN_LINK -DBOOST_LOG_DYN_LINK -DBOOST_REGEX_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_THREAD_DYN_LINK -DLIBNEST2D_GEOMETRIES_libslic3r -DLIBNEST2D_OPTIMIZER_nlopt -DLIBNEST2D_STATIC -DLIBNEST2D_THREADING_tbb -DSLIC3R_GUI -DTBB_USE_CAPTURED_EXCEPTION=0 -DUNICODE -DUSE_TBB -DWXINTL_NO_GETTEXT_MACRO -D_UNICODE -DwxNO_UNSAFE_WXSTRING_CONV -DwxUSE_UNICODE -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -I/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src -Isrc/platform -I/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r -Isrc/libslic3r -I/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libnest2d/include -I/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/glu-libtess/include -isystem /usr/include/eigen3 -isystem /usr/include/miniz -isystem /usr/include/OpenEXR  -DNDEBUG -march=native -O2 -pipe -fext-numeric-literals -Wall -Wno-reorder -fPIC -fsigned-char -Werror=return-type -Wno-ignored-attributes -Wno-unknown-pragmas -pthread -DOPENVDB_ABI_VERSION_NUMBER=8 -std=gnu++17 -Winvalid-pch -include /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999_build/src/libslic3r/CMakeFiles/libslic3r.dir/cmake_pch.hxx -MD -MT src/libslic3r/CMakeFiles/libslic3r.dir/Format/3mf.cpp.o -MF src/libslic3r/CMakeFiles/libslic3r.dir/Format/3mf.cpp.o.d -o src/libslic3r/CMakeFiles/libslic3r.dir/Format/3mf.cpp.o -c /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp
/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp:2168:42: error: ‘mz_zip_writer_staged_context’ has not been declared
 2168 |         bool _add_object_to_model_stream(mz_zip_writer_staged_context &context, unsigned int& object_id, ModelObject& object, BuildItemsList& build_items, VolumeToOffsetsMap& volumes_offsets);
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp:2169:41: error: ‘mz_zip_writer_staged_context’ has not been declared
 2169 |         bool _add_mesh_to_object_stream(mz_zip_writer_staged_context &context, ModelObject& object, VolumeToOffsetsMap& volumes_offsets);
      |                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp: In member function ‘bool Slic3r::_3MF_Exporter::_add_model_file_to_archive(const string&, mz_zip_archive&, const Slic3r::Model&, Slic3r::_3MF_Exporter::IdToObjectDataMap&)’:
/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp:2376:9: error: ‘mz_zip_writer_staged_context’ was not declared in this scope; did you mean ‘mz_zip_writer_add_cfile’?
 2376 |         mz_zip_writer_staged_context context;
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |         mz_zip_writer_add_cfile
/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp:2377:55: error: ‘context’ was not declared in this scope
 2377 |         if (!mz_zip_writer_add_staged_open(&archive, &context, MODEL_FILE.c_str(),
      |                                                       ^~~~~~~
/var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp:2377:55: note: suggested alternatives:
In file included from /usr/include/boost/phoenix/core/actor.hpp:19,
                 from /usr/include/boost/log/expressions/attr.hpp:20,
                 from /usr/include/boost/log/expressions.hpp:20,
                 from /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/pchheader.hpp:81,
                 from /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999_build/src/libslic3r/CMakeFiles/libslic3r.dir/cmake_pch.hxx:5,
                 from <command-line>:
/usr/include/boost/phoenix/core/environment.hpp:268:5: note:   ‘boost::phoenix::context’
  268 |     context(Env & env, Actions & actions)
      |     ^~~~~~~
In file included from /usr/include/boost/phoenix/core/limits.hpp:28,
                 from /usr/include/boost/phoenix/core/actor.hpp:13,
                 from /usr/include/boost/log/expressions/attr.hpp:20,
                 from /usr/include/boost/log/expressions.hpp:20,
                 from /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/pchheader.hpp:81,
                 from /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999_build/src/libslic3r/CMakeFiles/libslic3r.dir/cmake_pch.hxx:5,
                 from <command-line>:
/usr/include/boost/proto/proto_fwd.hpp:427:15: note:   ‘boost::proto::context’
  427 |     namespace context
      |               ^~~~~~~
In file included from /usr/include/boost/spirit/home/karma/domain.hpp:18,
                 from /usr/include/boost/spirit/home/karma/char/char.hpp:20,
                 from /usr/include/boost/spirit/home/karma/char.hpp:13,
                 from /usr/include/boost/spirit/home/karma.hpp:13,
                 from /usr/include/boost/spirit/include/karma.hpp:16,
                 from /var/tmp/portage/media-gfx/prusaslicer-9999/work/prusaslicer-9999/src/libslic3r/Format/3mf.cpp:24:

Full build log attached. prusaslicer-build.log.zip

Even when I use official build instructions https://github.com/prusa3d/PrusaSlicer/blob/master/doc/How%20to%20build%20-%20Linux%20et%20al.md and build dependencies first, build fails:

[ 30%] Building CXX object src/libslic3r/CMakeFiles/libslic3r.dir/Format/3mf.cpp.o
[ 30%] Building CXX object src/libslic3r/CMakeFiles/libslic3r.dir/Format/AMF.cpp.o
[ 30%] Building CXX object src/libslic3r/CMakeFiles/libslic3r.dir/Format/OBJ.cpp.o
In file included from /home/marian/programy/PrusaSlicer-version_2.4.0-alpha3/src/libslic3r/Format/AMF.cpp:30:
/home/marian/programy/PrusaSlicer-version_2.4.0-alpha3/src/libslic3r/miniz_extension.hpp:9:22: error: ‘mz_zip_archive’ was not declared in this scope
    9 | bool open_zip_reader(mz_zip_archive *zip, const std::string &fname_utf8);
      |                      ^~~~~~~~~~~~~~
/home/marian/programy/PrusaSlicer-version_2.4.0-alpha3/src/libslic3r/miniz_extension.hpp:9:38: error: ‘zip’ was not declared in this scope
    9 | bool open_zip_reader(mz_zip_archive *zip, const std::string &fname_utf8);
      |                                      ^~~
/home/marian/programy/PrusaSlicer-version_2.4.0-alpha3/src/libslic3r/miniz_extension.hpp:9:43: error: expected primary-expression before ‘const’
    9 | bool open_zip_reader(mz_zip_archive *zip, const std::string &fname_utf8);
      |                                           ^~~~~
/home/marian/programy/PrusaSlicer-version_2.4.0-alpha3/src/libslic3r/miniz_extension.hpp:9:72: error: expression list treated as compound expression in initializer [-fpermissive]
    9 | bool open_zip_reader(mz_zip_archive *zip, const std::string &fname_utf8);
      |                                                                        ^
[19:36:10 marian@worker build]$ ls -la ../deps/build/
celkem 228
drwxr-xr-x 46 marian users  4096  8. říj 19.06 .
drwxr-xr-x 24 marian users  4096  8. říj 19.06 ..
drwxr-xr-x  2 marian users  4096  8. říj 19.12 Blosc
drwxr-xr-x  2 marian users  4096  8. říj 19.07 Boost
drwxr-xr-x  2 marian users  4096  8. říj 19.06 boost_polygon
-rw-r--r--  1 marian users    29  8. říj 19.06 boost-user-config.jam
drwxr-xr-x  2 marian users  4096  8. říj 19.22 Cereal
drwxr-xr-x  2 marian users  4096  8. říj 19.22 CGAL
-rw-r--r--  1 marian users 19829  8. říj 19.06 CMakeCache.txt
drwxr-xr-x 26 marian users  4096  8. říj 19.23 CMakeFiles
-rw-r--r--  1 marian users  1701  8. říj 19.06 cmake_install.cmake
drwxr-xr-x  2 marian users  4096  8. říj 19.21 CURL
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_Blosc-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_boost_polygon-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_Boost-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_Cereal-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_CGAL-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_CURL-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_EXPAT-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_GLEW-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_GMP-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_JPEG-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_MPFR-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_NLopt-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_OpenCSG-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_OpenEXR-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_OpenSSL-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_OpenVDB-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_PNG-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_Qhull-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_TBB-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_TIFF-prefix
drwxr-xr-x  4 marian users  4096  8. říj 19.06 dep_wxWidgets-prefix
drwxr-xr-x  3 marian users  4096  8. říj 19.06 destdir
drwxr-xr-x  2 marian users  4096  8. říj 19.06 EXPAT
drwxr-xr-x  2 marian users  4096  8. říj 19.06 GLEW
drwxr-xr-x  2 marian users  4096  8. říj 19.06 GMP
drwxr-xr-x  2 marian users  4096  8. říj 19.15 JPEG
-rw-r--r--  1 marian users 14078  8. říj 19.06 Makefile
drwxr-xr-x  2 marian users  4096  8. říj 19.06 MPFR
drwxr-xr-x  2 marian users  4096  8. říj 19.23 NLopt
drwxr-xr-x  2 marian users  4096  8. říj 19.22 OpenCSG
drwxr-xr-x  2 marian users  4096  8. říj 19.07 OpenEXR
drwxr-xr-x  2 marian users  4096  8. říj 19.20 OpenSSL
drwxr-xr-x  2 marian users  4096  8. říj 19.12 OpenVDB
drwxr-xr-x  2 marian users  4096  8. říj 19.15 PNG
drwxr-xr-x  2 marian users  4096  8. říj 19.23 Qhull
drwxr-xr-x  2 marian users  4096  8. říj 19.11 TBB
drwxr-xr-x  2 marian users  4096  8. říj 19.15 TIFF
drwxr-xr-x  2 marian users  4096  8. říj 19.15 wxWidgets

Note: media-gfx/prusaslicer-2.3.3 builds correctly.

mkyral commented 3 years ago

Cmake found miniz-2.1.0 installed on my system. But it is not amalgamated on Gentoo.

[I] dev-libs/miniz
     Available versions:  (~)2.1.0-r2 **9999*l {examples static-libs}
     Installed versions:  2.1.0-r2(20:04:23 8.10.2021)
     Homepage:            https://github.com/richgel999/miniz
     Description:         A lossless, high performance data compression library
worker /home/marian # equery f dev-libs/miniz
 * Searching for miniz in dev-libs ...
 * Contents of dev-libs/miniz-2.1.0-r2:
/usr
/usr/include
/usr/include/miniz
/usr/include/miniz/miniz.h
/usr/include/miniz/miniz_common.h
/usr/include/miniz/miniz_tdef.h
/usr/include/miniz/miniz_tinfl.h
/usr/include/miniz/miniz_zip.h
/usr/lib
/usr/lib/debug
/usr/lib/debug/usr
/usr/lib/debug/usr/lib64
/usr/lib/debug/usr/lib64/libminiz.so.2.1.0.debug
/usr/lib64
/usr/lib64/cmake
/usr/lib64/cmake/miniz
/usr/lib64/cmake/miniz/minizConfig.cmake
/usr/lib64/cmake/miniz/minizConfigVersion.cmake
/usr/lib64/cmake/miniz/minizTargets-release.cmake
/usr/lib64/cmake/miniz/minizTargets.cmake
/usr/lib64/libminiz.so -> libminiz.so.2
/usr/lib64/libminiz.so.2 -> libminiz.so.2.1.0
/usr/lib64/libminiz.so.2.1.0
/usr/share
/usr/share/doc
/usr/share/doc/miniz-2.1.0-r2
/usr/share/doc/miniz-2.1.0-r2/ChangeLog.md.bz2
/usr/share/doc/miniz-2.1.0-r2/LICENSE.bz2
/usr/share/doc/miniz-2.1.0-r2/readme.md.bz2
/usr/share/pkgconfig
/usr/share/pkgconfig/miniz.pc
mkyral commented 3 years ago

So I've corrected the Gentoo miniz package installation, but prusa-slicer still does not compile as miniz version included in prusa-slicer is modified and prusa-slicer does not compile with upstream version of miniz.

So cmake should ignore system miniz.

-- Performing Test LLVM_HAS_ATOMICS - Success
-- OpenVDB libraries: /usr/lib64/libopenvdb.so
-- Using system miniz...
combolek commented 3 years ago

It does not seem like PrusaSlicer can be compiled with the stock miniz at all due to to the new stuff added in the PS version. Maybe try this? (or just uninstall miniz)

diff --git a/src/miniz/CMakeLists.txt b/src/miniz/CMakeLists.txt
index a664f7460..dc85ad7f4 100644
--- a/src/miniz/CMakeLists.txt
+++ b/src/miniz/CMakeLists.txt
@@ -3,10 +3,6 @@ project(miniz)

 add_library(miniz INTERFACE)

-if(NOT SLIC3R_STATIC OR CMAKE_SYSTEM_NAME STREQUAL "Linux")
-    find_package(miniz 2.1 QUIET)
-endif() 
-
 if(miniz_FOUND)

     message(STATUS "Using system miniz...")
mkyral commented 3 years ago

Yes. I've solved this in the same way.