[SERVER-22017] Mongodb 3.0.8 still does not compile on CentOS7/RHEL7 Created: 27/Dec/15  Updated: 14/Apr/16  Resolved: 08/Jan/16

Status: Closed
Project: Core Server
Component/s: Portability, Stability
Affects Version/s: 3.0.5
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Stream PP Assignee: Andrew Morrow (Inactive)
Resolution: Incomplete Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
is related to SERVER-19755 scons should require c++11 on 3.0 Closed
Operating System: ALL
Steps To Reproduce:

scons all \
--use-system-all \
--variant-dir=build%{?dist} \
--ssl \
--disable-warnings-as-errors \
--wiredtiger=on

Sprint: Platforms E (01/08/16)
Participants:

 Description   

MongoDB stopped to compile in 3.0.4 version.
3.0.4 is the latest version that can be builded on most stable server platform: RHEL7/CentOS7.

I have fresh CentOS 7.2 installation:

~ $ rpm -qa | grep -E "glibc|gcc|boost|ssl" | sort
boost-1.53.0-25.el7.x86_64
boost-atomic-1.53.0-25.el7.x86_64
boost-chrono-1.53.0-25.el7.x86_64
boost-context-1.53.0-25.el7.x86_64
boost-date-time-1.53.0-25.el7.x86_64
boost-devel-1.53.0-25.el7.x86_64
boost-filesystem-1.53.0-25.el7.x86_64
boost-graph-1.53.0-25.el7.x86_64
boost-iostreams-1.53.0-25.el7.x86_64
boost-locale-1.53.0-25.el7.x86_64
boost-math-1.53.0-25.el7.x86_64
boost-program-options-1.53.0-25.el7.x86_64
boost-python-1.53.0-25.el7.x86_64
boost-random-1.53.0-25.el7.x86_64
boost-regex-1.53.0-25.el7.x86_64
boost-serialization-1.53.0-25.el7.x86_64
boost-signals-1.53.0-25.el7.x86_64
boost-system-1.53.0-25.el7.x86_64
boost-test-1.53.0-25.el7.x86_64
boost-thread-1.53.0-25.el7.x86_64
boost-timer-1.53.0-25.el7.x86_64
boost-wave-1.53.0-25.el7.x86_64
gcc-4.8.5-4.el7.x86_64
gcc-c++-4.8.5-4.el7.x86_64
glibc-2.17-106.el7_2.1.x86_64
glibc-common-2.17-106.el7_2.1.x86_64
glibc-devel-2.17-106.el7_2.1.x86_64
glibc-headers-2.17-106.el7_2.1.x86_64
libgcc-4.8.5-4.el7.x86_64
openssl-1.0.1e-51.el7_2.1.x86_64
openssl-devel-1.0.1e-51.el7_2.1.x86_64
openssl-libs-1.0.1e-51.el7_2.1.x86_64

And I have following error while build process:

g++ -o build/build.el7/third_party/s2/util/math/mathutil.o -c -Wnon-virtual-dtor -Woverloaded-virtual -std=c++11 -fno-omit-frame-pointer -fPIC -fno-strict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Winvalid-pch -pipe -O3 -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-missing-braces -fno-builtin-memcmp -Isrc/third_party/s2 -Isrc/third_party/gflags-2.0/src -D_SCONS -DMONGO_EXPOSE_MACROS -DPCRE_STATIC -DSUPPORT_UTF8 -DMONGO_OPTIMIZED_BUILD -DMONGO_BYTE_ORDER=1234 -D_FILE_OFFSET_BITS=64 -DMONGO_SSL -DMONGO_HAVE___THREAD -DMONGO_HAVE_CXX11_ATOMICS -DBOOST_SYSTEM_NO_DEPRECATED -DBOOST_THREAD_VERSION=2 -DMONGO_HAVE_HEADER_UNISTD_H -DMONGO_HAVE_POSIX_MONOTONIC_CLOCK -DMONGO_HAVE_EXECINFO_BACKTRACE -DMONGO_HAVE_FIPS_MODE_SET -Isrc/third_party/s2 -Ibuild/build.el7 -Isrc src/third_party/s2/util/math/mathutil.cc
Generating placeholder library build/build.el7/third_party/s2/util/math/libmath.a
Skipping ranlib for build/build.el7/third_party/s2/util/math/libmath.a
g++ -o build/build.el7/mongo/mongo -Wl,-z,relro -pthread -Wl,-z,now -rdynamic build/build.el7/mongo/shell/dbshell.o -L/usr/lib64 -L/lib64 -Wl,--start-group build/build.el7/mongo/base/error_codes.o build/build.el7/mongo/base/global_initializer.o build/build.el7/mongo/base/global_initializer_registerer.o build/build.el7/mongo/base/init.o build/build.el7/mongo/base/initializer.o build/build.el7/mongo/base/initializer_context.o build/build.el7/mongo/base/initializer_dependency_graph.o build/build.el7/mongo/base/make_string_vector.o build/build.el7/mongo/base/parse_number.o build/build.el7/mongo/base/status.o build/build.el7/mongo/base/string_data.o build/build.el7/mongo/base/validate_locale.o build/build.el7/mongo/bson/bson_startuptest.o build/build.el7/mongo/bson/bson_validate.o build/build.el7/mongo/bson/bsonelement.o build/build.el7/mongo/bson/bsonmisc.o build/build.el7/mongo/bson/bsonobj.o build/build.el7/mongo/bson/bsonobjbuilder.o build/build.el7/mongo/bson/bsonobjiterator.o build/build.el7/mongo/bson/bsontypes.o build/build.el7/mongo/bson/mutable/document.o build/build.el7/mongo/bson/mutable/element.o build/build.el7/mongo/bson/oid.o build/build.el7/mongo/bson/optime.o build/build.el7/mongo/bson/util/bson_extract.o build/build.el7/mongo/client/auth_helpers.o build/build.el7/mongo/client/clientAndShell.o build/build.el7/mongo/client/connpool.o build/build.el7/mongo/client/dbclient.o build/build.el7/mongo/client/dbclient_rs.o build/build.el7/mongo/client/dbclientcursor.o build/build.el7/mongo/client/gridfs.o build/build.el7/mongo/client/native_sasl_client_session.o build/build.el7/mongo/client/replica_set_monitor.o build/build.el7/mongo/client/sasl_client_authenticate.o build/build.el7/mongo/client/sasl_client_authenticate_impl.o build/build.el7/mongo/client/sasl_client_conversation.o build/build.el7/mongo/client/sasl_client_session.o build/build.el7/mongo/client/sasl_plain_client_conversation.o build/build.el7/mongo/client/sasl_scramsha1_client_conversation.o build/build.el7/mongo/client/syncclusterconnection.o build/build.el7/mongo/crypto/crypto_openssl.o build/build.el7/mongo/crypto/mechanism_scram.o build/build.el7/mongo/db/auth/internal_user_auth.o build/build.el7/mongo/db/catalog/index_key_validate.o build/build.el7/mongo/db/dbmessage.o build/build.el7/mongo/db/field_parser.o build/build.el7/mongo/db/field_ref.o build/build.el7/mongo/db/field_ref_set.o build/build.el7/mongo/db/fts/fts_element_iterator.o build/build.el7/mongo/db/fts/fts_index_format.o build/build.el7/mongo/db/fts/fts_language.o build/build.el7/mongo/db/fts/fts_matcher.o build/build.el7/mongo/db/fts/fts_query.o build/build.el7/mongo/db/fts/fts_spec.o build/build.el7/mongo/db/fts/fts_spec_legacy.o build/build.el7/mongo/db/fts/fts_util.o build/build.el7/mongo/db/fts/stemmer.o build/build.el7/mongo/db/fts/stop_words.o build/build.el7/mongo/db/fts/stop_words_list.o build/build.el7/mongo/db/fts/tokenizer.o build/build.el7/mongo/db/geo/big_polygon.o build/build.el7/mongo/db/geo/geometry_container.o build/build.el7/mongo/db/geo/geoparser.o build/build.el7/mongo/db/geo/hash.o build/build.el7/mongo/db/geo/r2_region_coverer.o build/build.el7/mongo/db/geo/shapes.o build/build.el7/mongo/db/get_status_from_command_result.o build/build.el7/mongo/db/global_environment_experiment.o build/build.el7/mongo/db/global_environment_noop.o build/build.el7/mongo/db/hasher.o build/build.el7/mongo/db/index/btree_key_generator.o build/build.el7/mongo/db/index/expression_keys_private.o build/build.el7/mongo/db/index/external_key_generator.o build/build.el7/mongo/db/index_names.o build/build.el7/mongo/db/json.o build/build.el7/mongo/db/keypattern.o build/build.el7/mongo/db/lasterror.o build/build.el7/mongo/db/namespace_string.o build/build.el7/mongo/db/server_options.o build/build.el7/mongo/db/write_concern_options.o build/build.el7/mongo/logger/component_message_log_domain.o build/build.el7/mongo/logger/console.o build/build.el7/mongo/logger/log_component.o build/build.el7/mongo/logger/log_component_settings.o build/build.el7/mongo/logger/log_manager.o build/build.el7/mongo/logger/log_severity.o build/build.el7/mongo/logger/logger.o build/build.el7/mongo/logger/logstream_builder.o build/build.el7/mongo/logger/message_event_utf8_encoder.o build/build.el7/mongo/logger/message_log_domain.o build/build.el7/mongo/logger/ramlog.o build/build.el7/mongo/logger/rotatable_file_manager.o build/build.el7/mongo/logger/rotatable_file_writer.o build/build.el7/mongo/platform/backtrace.o build/build.el7/mongo/platform/posix_fadvise.o build/build.el7/mongo/platform/process_id.o build/build.el7/mongo/platform/random.o build/build.el7/mongo/platform/strcasestr.o build/build.el7/mongo/s/default_version.o build/build.el7/mongo/scripting/bson_template_evaluator.o build/build.el7/mongo/scripting/engine.o build/build.el7/mongo/scripting/engine_v8.o build/build.el7/mongo/scripting/utils.o build/build.el7/mongo/scripting/v8_db.o build/build.el7/mongo/scripting/v8_profiler.o build/build.el7/mongo/scripting/v8_utils.o build/build.el7/mongo/shell/bench.o build/build.el7/mongo/shell/linenoise.o build/build.el7/mongo/shell/linenoise_utf8.o build/build.el7/mongo/shell/mk_wcwidth.o build/build.el7/mongo/shell/mongo-server.o build/build.el7/mongo/shell/mongo.o build/build.el7/mongo/shell/shell_options.o build/build.el7/mongo/shell/shell_options_init.o build/build.el7/mongo/shell/shell_utils.o build/build.el7/mongo/shell/shell_utils_extended.o build/build.el7/mongo/shell/shell_utils_launcher.o build/build.el7/mongo/util/allocator.o build/build.el7/mongo/util/assert_util.o build/build.el7/mongo/util/background.o build/build.el7/mongo/util/base64.o build/build.el7/mongo/util/concurrency/mutex.o build/build.el7/mongo/util/concurrency/rwlockimpl.o build/build.el7/mongo/util/concurrency/spin_lock.o build/build.el7/mongo/util/concurrency/synchronization.o build/build.el7/mongo/util/concurrency/task.o build/build.el7/mongo/util/concurrency/thread_name.o build/build.el7/mongo/util/concurrency/thread_pool.o build/build.el7/mongo/util/concurrency/ticketholder.o build/build.el7/mongo/util/debugger.o build/build.el7/mongo/util/exception_filter_win32.o build/build.el7/mongo/util/fail_point.o build/build.el7/mongo/util/fail_point_registry.o build/build.el7/mongo/util/fail_point_service.o build/build.el7/mongo/util/file.o build/build.el7/mongo/util/file_allocator.o build/build.el7/mongo/util/hex.o build/build.el7/mongo/util/intrusive_counter.o build/build.el7/mongo/util/log.o build/build.el7/mongo/util/md5.o build/build.el7/mongo/util/net/hostandport.o build/build.el7/mongo/util/net/httpclient.o build/build.el7/mongo/util/net/listen.o build/build.el7/mongo/util/net/message.o build/build.el7/mongo/util/net/message_port.o build/build.el7/mongo/util/net/sock.o build/build.el7/mongo/util/net/socket_poll.o build/build.el7/mongo/util/net/ssl_expiration.o build/build.el7/mongo/util/net/ssl_manager.o build/build.el7/mongo/util/net/ssl_options.o build/build.el7/mongo/util/options_parser/constraints.o build/build.el7/mongo/util/options_parser/environment.o build/build.el7/mongo/util/options_parser/option_description.o build/build.el7/mongo/util/options_parser/option_section.o build/build.el7/mongo/util/options_parser/options_parser.o build/build.el7/mongo/util/options_parser/options_parser_init.o build/build.el7/mongo/util/options_parser/startup_option_init.o build/build.el7/mongo/util/options_parser/startup_options.o build/build.el7/mongo/util/options_parser/value.o build/build.el7/mongo/util/password.o build/build.el7/mongo/util/password_digest.o build/build.el7/mongo/util/paths.o build/build.el7/mongo/util/platform_init.o build/build.el7/mongo/util/processinfo.o build/build.el7/mongo/util/processinfo_linux2.o build/build.el7/mongo/util/progress_meter.o build/build.el7/mongo/util/quick_exit.o build/build.el7/mongo/util/safe_num.o build/build.el7/mongo/util/signal_handlers.o build/build.el7/mongo/util/signal_handlers_synchronous.o build/build.el7/mongo/util/signal_win32.o build/build.el7/mongo/util/stacktrace_posix.o build/build.el7/mongo/util/startup_test.o build/build.el7/mongo/util/stringutils.o build/build.el7/mongo/util/text.o build/build.el7/mongo/util/text_startuptest.o build/build.el7/mongo/util/thread_safe_string.o build/build.el7/mongo/util/time_support.o build/build.el7/mongo/util/timer.o build/build.el7/mongo/util/touch_pages.o build/build.el7/mongo/util/version.o build/build.el7/third_party/murmurhash3/MurmurHash3.o build/build.el7/third_party/s2/base/int128.o build/build.el7/third_party/s2/base/logging.o build/build.el7/third_party/s2/base/stringprintf.o build/build.el7/third_party/s2/base/strtoint.o build/build.el7/third_party/s2/s1angle.o build/build.el7/third_party/s2/s1interval.o build/build.el7/third_party/s2/s2.o build/build.el7/third_party/s2/s2cap.o build/build.el7/third_party/s2/s2cell.o build/build.el7/third_party/s2/s2cellid.o build/build.el7/third_party/s2/s2cellunion.o build/build.el7/third_party/s2/s2edgeindex.o build/build.el7/third_party/s2/s2edgeutil.o build/build.el7/third_party/s2/s2latlng.o build/build.el7/third_party/s2/s2latlngrect.o build/build.el7/third_party/s2/s2loop.o build/build.el7/third_party/s2/s2pointregion.o build/build.el7/third_party/s2/s2polygon.o build/build.el7/third_party/s2/s2polygonbuilder.o build/build.el7/third_party/s2/s2polyline.o build/build.el7/third_party/s2/s2r2rect.o build/build.el7/third_party/s2/s2region.o build/build.el7/third_party/s2/s2regioncoverer.o build/build.el7/third_party/s2/s2regionintersection.o build/build.el7/third_party/s2/s2regionunion.o build/build.el7/third_party/s2/strings/split.o build/build.el7/third_party/s2/strings/stringprintf.o build/build.el7/third_party/s2/strings/strutil.o build/build.el7/third_party/s2/util/coding/coder.o build/build.el7/third_party/s2/util/coding/varint.o build/build.el7/third_party/s2/util/math/mathutil.o build/build.el7/third_party/shim_allocator.o build/build.el7/third_party/shim_boost.o build/build.el7/third_party/shim_pcrecpp.o build/build.el7/third_party/shim_stemmer.o build/build.el7/third_party/shim_tz.o build/build.el7/third_party/shim_v8.o build/build.el7/third_party/shim_yaml.o -Wl,--end-group -lstemmer -lpcre -lpcrecpp -lyaml-cpp -lboost_program_options-mt -lboost_filesystem-mt -lboost_thread-mt -lboost_system-mt -ltcmalloc -lv8 -lm -lpthread -lssl -lcrypto -lrt -ldl
 
build/build.el7/mongo/shell/shell_utils_extended.o: In function `copy_file':
/usr/include/boost/filesystem/operations.hpp:384: undefined reference to `boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)'
 
build/build.el7/mongo/shell/shell_utils_launcher.o: In function `copy_file':
/usr/include/boost/filesystem/operations.hpp:384: undefined reference to `boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)'
 
collect2: error: ld returned 1 exit status
 
scons: *** [build/build.el7/mongo/mongo] Error 1
scons: building terminated because of errors.
error: Bad exit status from /var/tmp/rpm-tmp.qM3vpB (%build)

What am I doing wrong?
How can I get my package with mongodb-3.0.x builded?
Thanks.



 Comments   
Comment by Andrew Morrow (Inactive) [ 08/Jan/16 ]

Hi streampp - I'm closing this ticket since I haven't heard back from you. Please feel free to re-open it or comment in the ticket if you need further help.

Comment by Andrew Morrow (Inactive) [ 05/Jan/16 ]

streampp - Just checking back in on this ticket. Were you able to get a working build?

Comment by Andrew Morrow (Inactive) [ 28/Dec/15 ]

You would build with boost by not building with the --use-system-all flag, and then the bundled version of boost will be used. Unless there is a very good reason to do so, I'd discourage you from using any system version of a C++ language library due to ABI issues like the one you encountered. MongoDB is really designed to be built against the bundled copies of all of the libraries under third_party.

Comment by Stream PP [ 28/Dec/15 ]

Hello Andrew, thanks for quick answer.

Can you, please, tell me how can I build MongoDB with bundled boost?
As a workaround I've created patch MongoDB successfuly build with:

— a/src/mongo/shell/shell_utils_extended.cpp.orig 2015-12-27 03:31:50.352742000 +0300
+++ b/src/mongo/shell/shell_utils_extended.cpp 2015-12-27 03:33:57.753742000 +0300
@@ -31,6 +31,9 @@

#include "mongo/platform/basic.h"

+#define BOOST_NO_CXX11_SCOPED_ENUMS
+
+#include <boost/filesystem.hpp>
#include <boost/filesystem/convenience.hpp>
#include <fstream>

— a/src/mongo/shell/shell_utils_launcher.cpp.orig 2015-12-27 18:59:19.720628574 +0300
+++ b/src/mongo/shell/shell_utils_launcher.cpp 2015-12-27 19:00:00.732628574 +0300
@@ -28,6 +28,9 @@
*/

#define MONGO_LOG_DEFAULT_COMPONENT ::mongo::logger::LogComponent::kDefault
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+
+#include <boost/filesystem.hpp>

#include "mongo/platform/basic.h"

— a/src/mongo/db/storage/mmap_v1/repair_database.cpp.orig 2015-12-27 19:12:45.242628574 +0300
+++ b/src/mongo/db/storage/mmap_v1/repair_database.cpp 2015-12-27 19:13:10.970628574 +0300
@@ -34,6 +34,10 @@

#include "mongo/db/storage/mmap_v1/mmap_v1_engine.h"

+#define BOOST_NO_CXX11_SCOPED_ENUMS
+
+#include <boost/filesystem.hpp>
+
#include <boost/filesystem/operations.hpp>
#include <boost/scoped_ptr.hpp>

Comment by Andrew Morrow (Inactive) [ 28/Dec/15 ]

I notice that you are building with --use-system-all. This is unlikely to work as you intend. MongoDB 3.0.8 builds with the --std=c++11 flag, but the system boost may or may not be built this way. Our recommendation is to not build with --use-system-all and instead use the bundled third_party libraries.

However. to make sure we understand the issue fully, could you please confirm the following:

  • Does building with the bundled copy of boost work? Or do you get the same error?
  • Does the system copy of boost_filesystem contain a symbol that demangles to boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)

I strongly suspect that filesystem::copy_option is not ABI stable when mixing C++03 and C++11 builds due to the presence of the BOOST_SCOPED_ENUM macro in its declaration.

Generated at Thu Feb 08 03:59:09 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.