minidocx
minidocx copied to clipboard
make minidocx-next.zip error
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.
C++20 compilers are required to build minidocx 1.0.
I use GCC 14.2 GCC 14 Release Series. May 23, 2025. it should support c++20, how to set it in makefile?
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
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 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"