2017-06-02 8 views
10

में काम करता है उचित CMake में AddressSanitizer सक्षम करने के लिए रास्ता नहीं है क्या:मैं पालन AddressSanitizer झंडा जोड़ दिया है कि Xcode

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") 

सब कुछ बनाता है और जब Unix Makefiles का उपयोग कर ठीक चलाता है।

एक्सकोड प्रोजेक्ट उत्पन्न करते समय समस्या आती है, यह सिर्फ लिंक नहीं करना चाहता क्योंकि यह एएसन लाइब्रेरी नहीं ढूंढ सकता है।

मैं पहले से ही दो समाधान मिल गया, लेकिन उन्हें इस्तेमाल करने के लिए नहीं है, क्योंकि वे सिर्फ CMake का उपयोग कर स्वचालित नहीं किया जा सकता का फैसला किया:

  1. जुड़ा हुआ झंडे को -Wl,-undefined,dynamic_lookup जोड़ा जा रहा है, तो यह गतिशील पुस्तकालयों को जोड़ने को छोड़ देता है।
  2. libclang_rt.asan_osx_dynamic.dylib से सीधे लिंक करें।

तो इन दो समाधानों में समस्या क्या है?

  • # 1 समाधान का उपयोग करते हैं, तो मैं मैन्युअल Xcode में लक्ष्य योजना खोलने के लिए और libclang_rt.asan_osx_dynamic.dylib को DYLD_INSERT_LIBRARIES वातावरण चर की ओर इशारा करते जोड़ने के लिए।
  • समाधान # 2 का उपयोग करते समय, एएसन लाइब्रेरी का पथ कंप्यूटर के बीच भिन्न होता है।

साथ ही एक और समाधान के रूप में, मैं झंडा प्रक्षालक सक्षम करने पता Xcode लक्ष्य योजना से कोशिश की, लेकिन दिलचस्प बात यह मुद्दों मैं जोड़ा का पता नहीं चला, तो मैं एक समाधान के रूप में इस श्रेणी में नहीं रखा है क्योंकि यह अपने परीक्षण में विफल रहा है।

किसी भी मदद की बहुत सराहना की जाएगी।

+2

शायद यह बाहर की जाँच: https://github.com/arsenm/sanitizers-cmake – xaxxon

+0

आपको लगता है कि आप क्या चाहते हैं पर मुड़ता है एक Xcode प्रोजेक्ट स्थापित करने के बारे में पता है, तो आप कर सकते हैं इसे 'CMAKE_XCODE_ATTRIBUTE _...' चरमपंथी या प्रति-लक्षित गुणों का उपयोग करके सीएमके से सेट करें 'XCODE_ATTRIBUTE _... '। –

उत्तर

1

आपको लिंकर को भी ध्वज प्रदान करने की आवश्यकता है। मैं इसे इस तरह कर रहा हूँ:

set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") 
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") 
+0

दूसरी पंक्ति मेरे लिए गलत लगती है। आठ यह दोनों पक्षों, या CMAKE_LINKER_FLAGS_DEBUG पर CMAKE_STATIC_LINKER_FLAGS_DEBUG होना चाहिए। – proski

+0

सेट (CMAKE_CXX_FLAGS "$ {CMAKE_CXX_FLAGS} -फनो-ओमिट-फ्रेम-पॉइंटर -fsanitize = पता") आईओएस सीएमके निर्माण पर मेरे लिए काम किया। आपको यह सुनिश्चित करना चाहिए कि आपके द्वारा बनाई गई लाइब्रेरी की सही कॉन्फ़िगरेशन का उपयोग करना (डीबग/रिलीज़) –

संबंधित मुद्दे