2017-06-02 80 views
10

çalışır CMake içinde AddressSanitizer etkinleştirmek için uygun yolu nedir:Ben aşağıdaki gibi AddressSanitizer bayrağını ekledik Xcode

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

Her şey oluşturur ve Unix Makefiles kullanırken iyi çalışır.

Xcode projesini oluştururken sorun geliyor, sadece ASan kitaplığını bulamadığı için bağlantı vermek istemiyor.

Zaten iki çözüm bulundu, ancak onlar sadece CMake kullanılarak otomatik olamaz çünkü bunları kullanmamaya karar:

  1. bağlantılı bayrak -Wl,-undefined,dynamic_lookup ekleme, bu nedenle dinamik kütüphaneleri bağlantı atlıyor.
  2. Doğrudan libclang_rt.asan_osx_dynamic.dylib ile bağlantı.

Peki bu iki çözümle ilgili sorun nedir? Çözelti 1. kullanırken

  • , manuel Xcode hedef şemasını açın ve libclang_rt.asan_osx_dynamic.dylib için DYLD_INSERT_LIBRARIES ortam değişkeni işaret eklemek zorunda.
  • Çözüm 2'yi kullanırken, ASan kitaplığının yolu bilgisayarlar arasında değişir.

Ayrıca, başka bir çözüm olarak, Xcode hedef şemasından Address Sanitizer bayrağını etkinleştirmeyi denedim, ancak ilginç bir şekilde eklediğim sorunları algılamadı, bu yüzden bir çözüm olarak bunu listelemedim çünkü sınamamda başarısız oldu.

Herhangi bir yardım çok takdir edilecektir.

+2

belki bu check out: istediğini açar bir Xcode proje ayarının biliyorsanız https://github.com/arsenm/sanitizers-cmake – xaxxon

+0

yapabilirsiniz CMAKE_XCODE_ATTRIBUTE _... 'değişkenlerini ya da XCODE_ATTRIBUTE _...' hedefine göre özelliklerini kullanarak CMake'den ayarlayın. –

cevap

1

Bayrak (lar) ı bağlayıcıya da sağlamalısınız. Böyle yapıyorum:

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

İkinci satır bana yanlış geliyor. Sekiz, her iki tarafta CMAKE_STATIC_LINKER_FLAGS_DEBUG veya CMAKE_LINKER_FLAGS_DEBUG olmalıdır. – proski

+0

set (CMAKE_CXX_FLAGS "$ {CMAKE_CXX_FLAGS} -fno-ihmal-çerçeve-işaretçisi -fsanitize = adres") iOS CMake için benim için çalıştı. Oluşturduğunuz kütüphanenin doğru konfigürasyonunu kullandığınızdan emin olmalısınız (Debug/Release). –