कोड का निम्न भाग पर विचार करें:क्लैंग के साथ संकलन करते समय std :: atomic <double> लागू नहीं किया गया है?
#include <atomic>
int main(void) {
std::atomic<double> aDouble;
aDouble = 6.0;
}
जी ++ यह ठीक है, जबकि बजना संकलित ++ निम्नलिखित उत्पादन:
clang++ -std=c++11 Main.cpp
/tmp/Main-d4f0fc.o: In function `std::atomic<double>::store(double, std::memory_order)':
Main.cpp:(.text._ZNSt6atomicIdE5storeEdSt12memory_order[_ZNSt6atomicIdE5storeEdSt12memory_order]+0x31): undefined reference to `__atomic_store_8'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
वे एक ही मानक पुस्तकालय के खिलाफ लिंक नहीं है?
अधिकतर क्लैंग libC++ का उपयोग करता है जबकि gcc libstdC++ का उपयोग करता है। –
इसलिए, यदि आप क्लैंग के साथ एक सिस्टम पर संकलित कर रहे हैं जिसमें केवल जीसीसी मानक लाइब्रेरी स्थापित है, तो आपको शायद क्लैंग में '-lstdC++' ध्वज पास करने की आवश्यकता है। – 5gon12eder
हां, 'clang ++ -std = C++ 11 -lstdC++ Main.cpp' वास्तव में प्रोग्राम को संकलित करता है। तो यह 'libcd ++' है, जबकि 'libcdC++' के दौरान सुविधा को कार्यान्वित नहीं किया गया है? – Rovanion