minidocx icon indicating copy to clipboard operation
minidocx copied to clipboard

make minidocx-next.zip error

Open l1t1 opened this issue 5 months ago • 5 comments

I got the source zip file from the green [code] button of mainpage the error message is following

root@6ae32a5ffcde:/# unzip -qq minidocx-next.zip
unzip:  cannot find or open minidocx-next.zip, minidocx-next.zip.zip or minidocx-next.zip.ZIP.
root@6ae32a5ffcde:/# cd par
root@6ae32a5ffcde:/par# unzip -qq minidocx-next.zip
root@6ae32a5ffcde:/par# cd minidocx-next
root@6ae32a5ffcde:/par/minidocx-next# cmake .
CMake Error at CMakeLists.txt:2 (cmake_minimum_required):
  CMake 3.28 or higher is required.  You are running version 3.25.1


-- Configuring incomplete, errors occurred!
root@6ae32a5ffcde:/par/minidocx-next# cmake .
-- The C compiler identification is GNU 14.2.0
-- The CXX compiler identification is GNU 14.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/local/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /par/minidocx-next
root@6ae32a5ffcde:/par/minidocx-next# make -j8
[  4%] Building CXX object CMakeFiles/minidocx.dir/src/packaging/package.cpp.o
[  9%] Building CXX object CMakeFiles/minidocx.dir/src/packaging/part.cpp.o
[ 13%] Building CXX object CMakeFiles/minidocx.dir/src/utils/exceptions.cpp.o
[ 18%] Building CXX object CMakeFiles/minidocx.dir/src/utils/file.cpp.o
[ 22%] Building CXX object CMakeFiles/minidocx.dir/src/utils/string.cpp.o
[ 27%] Building CXX object CMakeFiles/minidocx.dir/src/utils/zip.cpp.o
[ 36%] Building CXX object CMakeFiles/minidocx.dir/src/word/main/container.cpp.o
[ 36%] Building CXX object CMakeFiles/minidocx.dir/src/word/main/document.cpp.o
/par/minidocx-next/src/utils/string.cpp: In function 'std::string md::removeSpaces(std::string)':
/par/minidocx-next/src/utils/string.cpp:14:20: error: 'remove_if' is not a member of 'std'; did you mean 'remove_cv'?
   14 |     tmp.erase(std::remove_if(tmp.begin(), tmp.end(), std::isspace), tmp.end());
      |                    ^~~~~~~~~
      |                    remove_cv
make[2]: *** [CMakeFiles/minidocx.dir/build.make:132: CMakeFiles/minidocx.dir/src/utils/string.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/par/minidocx-next/src/packaging/package.cpp: In member function 'void md::Package::readContentTypes()':
/par/minidocx-next/src/packaging/package.cpp:120:16: error: 'strcmp' is not a member of 'std'
  120 |       if (std::strcmp(el.name(), "Default") == 0) {
      |                ^~~~~~
/par/minidocx-next/src/packaging/package.cpp:126:21: error: 'strcmp' is not a member of 'std'
  126 |       else if (std::strcmp(el.name(), "Override") == 0) {
      |                     ^~~~~~
/par/minidocx-next/src/packaging/package.cpp: In member function 'void md::Package::readRelationships(const md::PartName&, md::Relationships&)':
/par/minidocx-next/src/packaging/package.cpp:182:16: error: 'strcmp' is not a member of 'std'
  182 |       if (std::strcmp(el.name(), "Relationship") != 0)
      |                ^~~~~~
/par/minidocx-next/src/utils/zip.cpp: In member function 'void md::Zip::deleteFiles(const std::vector<std::filesystem::__cxx11::path>&)':
/par/minidocx-next/src/utils/zip.cpp:348:14: error: 'memmove' is not a member of 'std'; did you mean 'wmemmove'?
  348 |         std::memmove(
      |              ^~~~~~~
      |              wmemmove
make[2]: *** [CMakeFiles/minidocx.dir/build.make:76: CMakeFiles/minidocx.dir/src/packaging/package.cpp.o] Error 1
make[2]: *** [CMakeFiles/minidocx.dir/build.make:146: CMakeFiles/minidocx.dir/src/utils/zip.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:108: CMakeFiles/minidocx.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

BTW, the minidocx-0.6.0.tar.gz file works fine.

l1t1 avatar Jun 12 '25 12:06 l1t1

C++20 compilers are required to build minidocx 1.0.

totravel avatar Jun 12 '25 20:06 totravel

I use GCC 14.2 GCC 14 Release Series. May 23, 2025. it should support c++20, how to set it in makefile?

l1t1 avatar Jun 12 '25 22:06 l1t1

I add #include <cstring> in package.cpp, the errors of package.cpp are gone. It now shows

[  4%] Building CXX object CMakeFiles/minidocx.dir/src/utils/string.cpp.o
/par/minidocx-next/src/utils/string.cpp: In function 'std::string md::removeSpaces(std::string)':
/par/minidocx-next/src/utils/string.cpp:14:20: error: 'remove_if' is not a member of 'std'; did you mean 'remove_cv'?
   14 |     tmp.erase(std::remove_if(tmp.begin(), tmp.end(), std::isspace), tmp.end());
      |                    ^~~~~~~~~
      |                    remove_cv
make[2]: *** [CMakeFiles/minidocx.dir/build.make:132: CMakeFiles/minidocx.dir/src/utils/string.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:108: CMakeFiles/minidocx.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

I add #include <algorithm> in string.cpp, it still shows

[  4%] Building CXX object CMakeFiles/minidocx.dir/src/utils/string.cpp.o
/par/minidocx-next/src/utils/string.cpp: In function 'std::string md::removeSpaces(std::string)':
/par/minidocx-next/src/utils/string.cpp:16:29: error: no matching function for call to 'remove_if(std::__cxx11::basic_string<char>::iterator, std::__cxx11::basic_string<char>::iterator, <unresolved overloaded function type>)'
   16 |     tmp.erase(std::remove_if(tmp.begin(), tmp.end(), std::isspace), tmp.end());
      |               ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/c++/14.2.0/algorithm:61,
                 from /par/minidocx-next/src/utils/string.cpp:10:
/usr/local/include/c++/14.2.0/bits/stl_algo.h:822:5: note: candidate: 'template<class _FIter, class _Predicate> constexpr _FIter std::remove_if(_FIter, _FIter, _Predicate)'
  822 |     remove_if(_ForwardIterator __first, _ForwardIterator __last,
      |     ^~~~~~~~~
/usr/local/include/c++/14.2.0/bits/stl_algo.h:822:5: note:   template argument deduction/substitution failed:
/par/minidocx-next/src/utils/string.cpp:16:29: note:   couldn't deduce template parameter '_Predicate'
   16 |     tmp.erase(std::remove_if(tmp.begin(), tmp.end(), std::isspace), tmp.end());
      |               ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/c++/14.2.0/algorithm:85:
/usr/local/include/c++/14.2.0/pstl/glue_algorithm_defs.h:220:1: note: candidate: 'template<class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate> __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> std::remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate)'
  220 | remove_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred);
      | ^~~~~~~~~
/usr/local/include/c++/14.2.0/pstl/glue_algorithm_defs.h:220:1: note:   candidate expects 4 arguments, 3 provided
make[2]: *** [CMakeFiles/minidocx.dir/build.make:132: CMakeFiles/minidocx.dir/src/utils/string.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:108: CMakeFiles/minidocx.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

l1t1 avatar Jun 12 '25 22:06 l1t1

I encountered the same problem. After inserting the header file, I also modified this file:

// src/utils/string.cpp
namespace MINIDOCX_NAMESPACE
{
  std::string removeSpaces(std::string str) {
    std::string tmp{ std::move(str) };
    tmp.erase(std::remove_if(tmp.begin(), tmp.end(), [](unsigned char c) { return std::isspace(c); }), tmp.end());
    return tmp;
  }
}

Now, I can compile the target minidocx without any errors.

However, I am still unable to build any example demos. I get the following error:

include/minidocx/word/main/document.hpp:9:10: fatal error: config.hpp: No such file or directory
    9 | #include "config.hpp"
      |          ^~~~~~~~~~~~

I am using MSYS2 GCC 15.1.0.

Aurora1949 avatar Aug 08 '25 16:08 Aurora1949

@Aurora1949 that build error is because include/minidocx is a PRIVATE include for minidocx's target, The temp solution for building the examples to change that PRIVATE to a PUBLIC, or modify the example's cmakefile to look at "include/minidocx" and "include"

killerswin2 avatar Oct 06 '25 00:10 killerswin2