❯ make ptl-shared verbose=1 Building CXX object source/externals/ptl/src/CMakeFiles/ptl-shared.dir/TaskGroup.cc.o Building CXX object source/externals/ptl/src/CMakeFiles/ptl-shared.dir/TaskRunManager.cc.o Building CXX object source/externals/ptl/src/CMakeFiles/ptl-shared.dir/ThreadData.cc.o Building CXX object source/externals/ptl/src/CMakeFiles/ptl-shared.dir/ThreadPool.cc.o Building CXX object source/externals/ptl/src/CMakeFiles/ptl-shared.dir/Threading.cc.o Building CXX object source/externals/ptl/src/CMakeFiles/ptl-shared.dir/Timer.cc.o Building CXX object source/externals/ptl/src/CMakeFiles/ptl-shared.dir/UserTaskQueue.cc.o Building CXX object source/externals/ptl/src/CMakeFiles/ptl-shared.dir/VUserTaskQueue.cc.o Linking CXX shared library ../../../../BuildProducts/lib/libG4ptl.dylib Undefined symbols for architecture arm64: "std::__1::basic_stringbuf, std::__1::allocator>::str() const", referenced from: void PTL::EnvSettings::insert(std::__1::basic_string, std::__1::allocator> const&, unsigned long long) in TaskRunManager.cc.o PTL::ThreadPool::initialize_threadpool(unsigned long) in ThreadPool.cc.o PTL::ThreadPool::destroy_threadpool() in ThreadPool.cc.o void PTL::EnvSettings::insert(std::__1::basic_string, std::__1::allocator> const&, bool) in ThreadPool.cc.o void PTL::EnvSettings::insert(std::__1::basic_string, std::__1::allocator> const&, int) in ThreadPool.cc.o void PTL::EnvSettings::insert(std::__1::basic_string, std::__1::allocator> const&, unsigned long) in ThreadPool.cc.o PTL::UserTaskQueue::ExecuteOnAllThreads(PTL::ThreadPool*, std::__1::function) in UserTaskQueue.cc.o ... "std::__1::basic_stringbuf, std::__1::allocator>::str(std::__1::basic_string, std::__1::allocator> const&)", referenced from: std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in TaskRunManager.cc.o std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in ThreadPool.cc.o std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in UserTaskQueue.cc.o "VTT for std::__1::basic_stringstream, std::__1::allocator>", referenced from: void PTL::EnvSettings::insert(std::__1::basic_string, std::__1::allocator> const&, unsigned long long) in TaskRunManager.cc.o std::__1::basic_stringstream, std::__1::allocator>::basic_stringstream[abi:v15006]() in TaskRunManager.cc.o std::__1::basic_stringstream, std::__1::allocator>::~basic_stringstream() in TaskRunManager.cc.o std::__1::basic_stringstream, std::__1::allocator>::basic_stringstream[abi:v15006]() in ThreadPool.cc.o std::__1::basic_stringstream, std::__1::allocator>::~basic_stringstream() in ThreadPool.cc.o void PTL::EnvSettings::insert(std::__1::basic_string, std::__1::allocator> const&, bool) in ThreadPool.cc.o void PTL::EnvSettings::insert(std::__1::basic_string, std::__1::allocator> const&, int) in ThreadPool.cc.o ... "VTT for std::__1::basic_istringstream, std::__1::allocator>", referenced from: unsigned long long PTL::GetEnv(std::__1::basic_string, std::__1::allocator> const&, unsigned long long) in TaskRunManager.cc.o std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in TaskRunManager.cc.o std::__1::basic_istringstream, std::__1::allocator>::~basic_istringstream() in TaskRunManager.cc.o int PTL::GetEnv(std::__1::basic_string, std::__1::allocator> const&, int) in ThreadPool.cc.o unsigned long PTL::GetEnv(std::__1::basic_string, std::__1::allocator> const&, unsigned long) in ThreadPool.cc.o std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in ThreadPool.cc.o std::__1::basic_istringstream, std::__1::allocator>::~basic_istringstream() in ThreadPool.cc.o ... "vtable for std::__1::basic_stringbuf, std::__1::allocator>", referenced from: unsigned long long PTL::GetEnv(std::__1::basic_string, std::__1::allocator> const&, unsigned long long) in TaskRunManager.cc.o std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in TaskRunManager.cc.o void PTL::EnvSettings::insert(std::__1::basic_string, std::__1::allocator> const&, unsigned long long) in TaskRunManager.cc.o std::__1::basic_istringstream, std::__1::allocator>::~basic_istringstream() in TaskRunManager.cc.o std::__1::basic_stringstream, std::__1::allocator>::basic_stringstream[abi:v15006]() in TaskRunManager.cc.o std::__1::basic_stringstream, std::__1::allocator>::~basic_stringstream() in TaskRunManager.cc.o int PTL::GetEnv(std::__1::basic_string, std::__1::allocator> const&, int) in ThreadPool.cc.o ... NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. "vtable for std::__1::basic_stringstream, std::__1::allocator>", referenced from: std::__1::basic_stringstream, std::__1::allocator>::basic_stringstream[abi:v15006]() in TaskRunManager.cc.o std::__1::basic_stringstream, std::__1::allocator>::basic_stringstream[abi:v15006]() in ThreadPool.cc.o std::__1::basic_stringstream, std::__1::allocator>::basic_stringstream[abi:v15006]() in UserTaskQueue.cc.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. "vtable for std::__1::basic_istringstream, std::__1::allocator>", referenced from: std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in TaskRunManager.cc.o std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in ThreadPool.cc.o std::__1::basic_istringstream, std::__1::allocator>::basic_istringstream[abi:v15006](std::__1::basic_string, std::__1::allocator> const&, unsigned int) in UserTaskQueue.cc.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[3]: *** [BuildProducts/lib/libG4ptl.2.3.3.dylib] Error 1 make[2]: *** [source/externals/ptl/src/CMakeFiles/ptl-shared.dir/all] Error 2 make[1]: *** [source/externals/ptl/src/CMakeFiles/ptl-shared.dir/rule] Error 2 make: *** [ptl-shared] Error 2