1

I have a project that compiles on Ubuntu with gcc and g++ 7.5. For some reason it does not compile with the latest G++ on my Arch.

For some reason, std::atomic_bool is not found, even though the exact same code compiles in Ubuntu.

I installed gcc and g++ 7.5 onto my Arch, and then ran the following as per here:

export CC=/usr/bin/gcc-7
export CXX=/usr/bin/g++-7
cmake ..
make -j12

But it did not work, and failed with the same message as if I tried to build with gcc-10. I tried all different variations, like the following, but none of them worked.

cmake -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7 ..

Am I missing anything?

Here is the terminal output

[seedship@triple-destinies cpsCore]$ mkdir build
[seedship@triple-destinies cpsCore]$ cd build/
[seedship@triple-destinies build]$ export CC=/usr/bin/gcc-7
[seedship@triple-destinies build]$ export CXX=/usr/bin/g++-7
[seedship@triple-destinies build]$ cmake ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/gcc-7 - 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/bin/g++-7 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Boost: /usr/lib64/cmake/Boost-1.75.0/BoostConfig.cmake (found version "1.75.0") found components: system 
Compiling with NODEBUG
-- Configuring done
-- Generating done
-- Build files have been written to: /home/seedship/cpsCore/build
[seedship@triple-destinies build]$ make -j12
Scanning dependencies of target cps_core
[  4%] Building CXX object src/CMakeFiles/cps_core.dir/Aggregation/Aggregator.cpp.o
[  4%] Building CXX object src/CMakeFiles/cps_core.dir/Aggregation/DynamicContainer/DynamicObjectContainer.cpp.o
[  6%] Building CXX object src/CMakeFiles/cps_core.dir/Configuration/JsonPopulator.cpp.o
[ 11%] Building CXX object src/CMakeFiles/cps_core.dir/Configuration/TerminalConfigurator.cpp.o
[ 11%] Building CXX object src/CMakeFiles/cps_core.dir/Configuration/Configuration.cpp.o
[ 13%] Building CXX object src/CMakeFiles/cps_core.dir/Synchronization/AggregatableRunner.cpp.o
[ 16%] Building CXX object src/CMakeFiles/cps_core.dir/Synchronization/SimpleRunner.cpp.o
[ 18%] Building CXX object src/CMakeFiles/cps_core.dir/Synchronization/SynchronizedRunner.cpp.o
[ 20%] Building CXX object src/CMakeFiles/cps_core.dir/Synchronization/SynchronizedRunnerMaster.cpp.o
[ 23%] Building CXX object src/CMakeFiles/cps_core.dir/Framework/PluginManager.cpp.o
[ 25%] Building CXX object src/CMakeFiles/cps_core.dir/Framework/Helper.cpp.o
[ 27%] Building CXX object src/CMakeFiles/cps_core.dir/Logging/CPSLogger.cpp.o
[ 30%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/LinearAlgebra.cpp.o
In file included from /home/seedship/cpsCore/src/Configuration/TerminalConfigurator.cpp:5:0:
/home/seedship/cpsCore/include/cpsCore/Configuration/TerminalConfigurator.h: In member function ‘bool TerminalConfigurator::configure(ConfObj&)’:
/home/seedship/cpsCore/include/cpsCore/Configuration/TerminalConfigurator.h:49:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
/home/seedship/cpsCore/include/cpsCore/Configuration/TerminalConfigurator.h: In member function ‘TerminalConfigurator& TerminalConfigurator::operator&(Param&)’:
/home/seedship/cpsCore/include/cpsCore/Configuration/TerminalConfigurator.h:67:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
[ 32%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/Packet.cpp.o
[ 34%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/SignalHandler/SignalHandler.cpp.o
[ 37%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/TimeProvider/SystemTimeProvider.cpp.o
[ 39%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/Scheduler/MicroSimulator.cpp.o
[ 41%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/Scheduler/ExternalSimulator.cpp.o
[ 44%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/Scheduler/MultiThreadingScheduler.cpp.o
[ 46%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/Scheduler/Event.cpp.o
In file included from /usr/include/boost/property_tree/json_parser/detail/parser.hpp:7:0,
                 from /usr/include/boost/property_tree/json_parser/detail/read.hpp:13,
                 from /usr/include/boost/property_tree/json_parser.hpp:16,
                 from /home/seedship/cpsCore/src/Framework/Helper.cpp:7:
/usr/include/boost/bind.hpp:41:1: note: #pragma message: The practice of declaring the Bind placeholders (_1, _2, ...) in the global namespace is deprecated. Please use <boost/bind/bind.hpp> + using namespace boost::placeholders, or define BOOST_BIND_GLOBAL_PLACEHOLDERS to retain the current behavior.
 )
 ^
In file included from /usr/include/boost/property_tree/json_parser/detail/parser.hpp:7:0,
                 from /usr/include/boost/property_tree/json_parser/detail/read.hpp:13,
                 from /usr/include/boost/property_tree/json_parser.hpp:16,
                 from /home/seedship/cpsCore/src/Configuration/Configuration.cpp:5:
/usr/include/boost/bind.hpp:41:1: note: #pragma message: The practice of declaring the Bind placeholders (_1, _2, ...) in the global namespace is deprecated. Please use <boost/bind/bind.hpp> + using namespace boost::placeholders, or define BOOST_BIND_GLOBAL_PLACEHOLDERS to retain the current behavior.
 )
 ^
[ 48%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/Scheduler/EventBody.cpp.o
[ 51%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IPC/IPC.cpp.o
[ 53%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IPC/Subscription.cpp.o
[ 55%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp.o
[ 58%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp.o
[ 60%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IPC/detail/MessageQueuePublisherImpl.cpp.o
[ 62%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IPC/detail/SharedMemoryPublisherImpl.cpp.o
[ 65%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IDC/NetworkLayer/Serial/SerialHandler.cpp.o
[ 67%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IDC/NetworkLayer/Serial/SerialNetworkLayer.cpp.o
[ 69%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IDC/NetworkLayer/Redis/RedisPublisher.cpp.o
In file included from /home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:11:0:
/home/seedship/cpsCore/include/cpsCore/Utilities/IPC/detail/MessageQueueSubscriptionImpl.h:45:7: error: ‘atomic_bool’ in namespace ‘std’ does not name a type
  std::atomic_bool listenerCanceled_;
       ^~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp: In constructor ‘MessageQueueSubscriptionImpl::MessageQueueSubscriptionImpl(const string&, std::size_t)’:
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:15:62: error: class ‘MessageQueueSubscriptionImpl’ does not have any field named ‘listenerCanceled_’
   messageQueue_(boost::interprocess::open_only, id.c_str()), listenerCanceled_(false), maxPacketSize_(
                                                              ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp: In destructor ‘virtual MessageQueueSubscriptionImpl::~MessageQueueSubscriptionImpl()’:
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:22:7: error: ‘listenerCanceled_’ was not declared in this scope
  if (!listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:22:7: note: suggested alternative: ‘listenerThread_’
  if (!listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
       listenerThread_
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp: In member function ‘virtual void MessageQueueSubscriptionImpl::cancel()’:
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:31:2: error: ‘listenerCanceled_’ was not declared in this scope
  listenerCanceled_.store(true);
  ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:31:2: note: suggested alternative: ‘listenerThread_’
  listenerCanceled_.store(true);
  ^~~~~~~~~~~~~~~~~
  listenerThread_
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp: In member function ‘void MessageQueueSubscriptionImpl::onMessageQueue()’:
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:54:7: error: ‘listenerCanceled_’ was not declared in this scope
   if (listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:54:7: note: suggested alternative: ‘listenerThread_’
   if (listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
       listenerThread_
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:79:7: error: ‘listenerCanceled_’ was not declared in this scope
   if (listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp:79:7: note: suggested alternative: ‘listenerThread_’
   if (listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
       listenerThread_
In file included from /home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp:12:0:
/home/seedship/cpsCore/include/cpsCore/Utilities/IPC/detail/SharedMemorySubscriptionImpl.h:47:7: error: ‘atomic_bool’ in namespace ‘std’ does not name a type
  std::atomic_bool listenerCanceled_;
       ^~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp: In constructor ‘SharedMemorySubscriptionImpl::SharedMemorySubscriptionImpl(const string&)’:
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp:18:92: error: class ‘SharedMemorySubscriptionImpl’ does not have any field named ‘listenerCanceled_’
   sharedMem_(boost::interprocess::open_only, id.c_str(), boost::interprocess::read_write), listenerCanceled_(
                                                                                            ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp: In member function ‘virtual void SharedMemorySubscriptionImpl::cancel()’:
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp:33:2: error: ‘listenerCanceled_’ was not declared in this scope
  listenerCanceled_.store(true);
  ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp:33:2: note: suggested alternative: ‘listenerThread_’
  listenerCanceled_.store(true);
  ^~~~~~~~~~~~~~~~~
  listenerThread_
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp: In destructor ‘virtual SharedMemorySubscriptionImpl::~SharedMemorySubscriptionImpl()’:
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp:40:7: error: ‘listenerCanceled_’ was not declared in this scope
  if (!listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp:40:7: note: suggested alternative: ‘listenerThread_’
  if (!listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
       listenerThread_
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp: In member function ‘void SharedMemorySubscriptionImpl::onSharedMemory()’:
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp:73:7: error: ‘listenerCanceled_’ was not declared in this scope
   if (listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
/home/seedship/cpsCore/src/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp:73:7: note: suggested alternative: ‘listenerThread_’
   if (listenerCanceled_.load())
       ^~~~~~~~~~~~~~~~~
       listenerThread_
In file included from /home/seedship/cpsCore/include/cpsCore/Utilities/IPC/IPC.h:14:0,
                 from /home/seedship/cpsCore/src/Utilities/Scheduler/ExternalSimulator.cpp:7:
/home/seedship/cpsCore/include/cpsCore/Utilities/IPC/detail/SharedMemorySubscriptionImpl.h:47:7: error: ‘atomic_bool’ in namespace ‘std’ does not name a type
  std::atomic_bool listenerCanceled_;
       ^~~~~~~~~~~
[ 72%] Building CXX object src/CMakeFiles/cps_core.dir/Utilities/IDC/NetworkLayer/Redis/RedisSubscriber.cpp.o
make[2]: *** [src/CMakeFiles/cps_core.dir/build.make:381: src/CMakeFiles/cps_core.dir/Utilities/IPC/detail/MessageQueueSubscriptionImpl.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [src/CMakeFiles/cps_core.dir/build.make:394: src/CMakeFiles/cps_core.dir/Utilities/IPC/detail/SharedMemorySubscriptionImpl.cpp.o] Error 1
make[2]: *** [src/CMakeFiles/cps_core.dir/build.make:303: src/CMakeFiles/cps_core.dir/Utilities/Scheduler/ExternalSimulator.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:443: src/CMakeFiles/cps_core.dir/all] Error 2
make: *** [Makefile:149: all] Error 2

seedship
  • 107
  • 1
  • 8
  • When configure the project, CMake prints which compiler is detected. Please, show that output. – Tsyvarev Jan 14 '21 at 15:06
  • Updated the description with that info – seedship Jan 14 '21 at 15:11
  • You're using gcc-7.5.0 per the cmake output. Your error is about `std::atomic_bool`, so check that you've got `#include ` in `SharedMemorySubscriptionImpl.h`. – Stephen Newell Jan 14 '21 at 15:25
  • I do not understand. You __want__ to run with gcc10 __or__ gcc7? If you want to run with gcc10, then why do you do `export CC=/usr/bin/gcc-7`? – KamilCuk Jan 14 '21 at 15:34
  • @Stephen Newell Ah, yup that fixed it, thanks! There were 2 files with the same issue, but before when I included in 1 file, I got the issue for the other file but I thought it was still for the same file, so I thought it didn't fix it. I'm still confused why it worked on ubuntu without including it though – seedship Jan 14 '21 at 15:39
  • 1
    @KamilCuk I want gcc7, my system default is gcc10. As Stephen pointed out, I was missing an include, but for some reason it worked on Ubuntu gcc7 without the include so I thought it was a compiler issue – seedship Jan 14 '21 at 15:41

0 Answers0