Dear log4cxx developers, I am trying to build log4cxx on a Centos 7.6 system, using: * CMake 3.13.4, * g++ 4.8.5 * Boost 1.53.0 * apr-1.6.2 * apr-devel-1.6.2 * apr-util-1.6.0 * apr-util-devel-1.6.0
But I am not having much success. The CMake appears to run without error, excluding the JAVA pieces (we should be OK to skip those tests): [build (test-v0.12.0 %)]$ cmake3 .. -- Found APR: -L/usr/lib64;-lapr-1 -- Boost version: 1.53.0 -- Found the following Boost libraries: -- thread -- chrono -- system -- date_time -- atomic -- Could NOT find Java (missing: Java_JAVAC_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVADOC_EXECUTABLE Java_JAVAH_EXECUTABLE Development) (found version "1.8.0.201") -- -- -- log4cxx configuration summary: -- -- Build shared library ............ : ON -- Build tests ..................... : ON -- Build site ...................... : OFF -- Install prefix .................. : /usr/local -- C++ compiler .................... : /usr/bin/c++ -- log4cxx char API ................ : utf-8 -- log4cxx wchar API ............... : ON -- log4cxx unichar API ............. : OFF -- logchar type .................... : utf-8 -- charset ......................... : locale -- Using libESMTP .................. : OFF -- ODBC library .................... : OFF -- syslog .......................... : ON -- Qt support ...................... : OFF -- shared_mutex implementation ..... : -- Applications required for tests: -- zip ............................. : /usr/bin/zip -- sed ............................. : /usr/bin/sed -- gzip ............................ : /usr/bin/gzip -- Configuring done -- Generating done -- Build files have been written to: /home/shared/ramirand/git2/oamlog4cxx/log4cxx/build ... but then the build runs into errors: [build (test-v0.12.0 %)]$ make Checking configuration [ 0%] Built target configure_log4cxx Scanning dependencies of target log4cxx [ 1%] Building CXX object src/main/cpp/CMakeFiles/log4cxx.dir/action.cpp.o In file included from /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp:18:0: /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/include/log4cxx/rolling/action.h:51:3: error: 'mutex' in namespace 'std' does not name a type std::mutex mutex; ^ /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp: In member function 'void log4cxx::rolling::Action::run(log4cxx::helpers::Pool&)': /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp:43:36: error: 'mutex' was not declared in this scope std::unique_lock<std::mutex> lock(mutex); ^ /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp:43:36: note: suggested alternative: In file included from /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp:19:0: /usr/include/c++/4.8.2/mutex:117:9: note: 'std::mutex' class mutex : private __mutex_base ^ /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp: In member function 'void log4cxx::rolling::Action::close()': /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp:66:36: error: 'mutex' was not declared in this scope std::unique_lock<std::mutex> lock(mutex); ^ /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp:66:36: note: suggested alternative: In file included from /home/shared/ramirand/git2/oamlog4cxx/log4cxx/src/main/cpp/action.cpp:19:0: /usr/include/c++/4.8.2/mutex:117:9: note: 'std::mutex' class mutex : private __mutex_base ^ make[2]: *** [src/main/cpp/CMakeFiles/log4cxx.dir/action.cpp.o] Error 1 make[1]: *** [src/main/cpp/CMakeFiles/log4cxx.dir/all] Error 2 make: *** [all] Error 2 [build (test-v0.12.0 %)]$ I've tried with and without adding CMAKE_CXX_FLAGS=-std=c++11, with no discernable effect. I've tried guessing where to drop some "#include <mutex>" lines, and if I do that, the build heads straight into problems with shared_mutex (which it should be getting from Boost) instead. I noticed that in CMakeCache.txt, it has detected STD_MUTEX_FOUND:INTERNAL=TRUE, but Boost_SHARED_MUTEX_FOUND:INTERAL=FALSE: [build (test-v0.12.0 %)]$ grep -i mutex CMakeCache.txt Boost_MUTEX_FOUND:INTERNAL=FALSE Boost_SHARED_MUTEX_FOUND:INTERNAL=FALSE STD_MUTEX_FOUND:INTERNAL=TRUE STD_SHARED_MUTEX_FOUND:INTERNAL=FALSE [build (test-v0.12.0 %)]$ This seems wrong, since it appeared that CMake had correctly detected that Boost 1.5.3 (with thread) is installed. Is it possible that CMake might detect Boost thread is there, but still silently fail the test compile? How can I determine what is causing it not to detect the Boost::shared_mutex implementation? Has anyone successfully built log4cxx 0.12.0 on Centos 7.6? Based on the release notes, I thought we'd be able to build 0.12.0, because g++ 4.8.5 should support C++11, and we do have Boost for shared_mutex. I know g++ 4.8.5 is old, but upgrading that isn't likely to be feasible for us in the short term, so I'd like to try to get it to build. Any assistance would be greatly appreciated. We're on log4cxx 0.10.0 now, and there are a number of bug fixes we'd like to have. Thanks, Russ Miranda