Задать вопрос

Почему метод класса С++ библиотеки в Debug под Mac OS X and Linux возвращает nullptr?

Возникли проблемы с использованием сторонней библиотеки. При сборке сторонней библиотеки и моего приложения в Debug mode функция, реализованная в .h файле, возвращает nullptr. В Release mode все в порядке. Проблема возникает в Mac OS X и Linux. Если перенести реализацию из .h в .cpp все начинает работать. Но таких функций в библиотеке очень много и все перенести в .cpp не представляется возможным. Насколько я понимаю, виной всему параметры сборки компилятора. Сторонняя библиотека собирается в static library .a, собирал ее сам - могу менять параметры компилятора при сборке, мое приложение в исполняемый файл.

В .h файле:
buzz::XmppClient *client()
{
std::cout << "GET XmppPump.client: " << client_ << std::endl;
return client_;
}

В .cpp файле:

XmppPump::XmppPump(XmppPumpNotify * notify)
{
  state_ = buzz::XmppEngine::STATE_NONE;
  notify_ = notify;
  client_ = new buzz::XmppClient(this);  // NOTE: deleted by TaskRunner
  std::cout << "CREATE XmppPump.client: " << client_ << std::endl;
}

Использование в моем приложении:
assert( ! m_pump );
m_pump = new buzz::XmppPump( );
auto xmppClient = m_pump->client( );
assert( xmppClient ); // роковой assert для debug

Вывод моего приложения:

в Debug:

CREATE XmppPump.client: 0x116431cc0
GET XmppPump.client: 0

в Release:

CREATE XmppPump.client: 0x10322d2c0
GET XmppPump.client: 0x10322d2c0

Флаги сборки моего приложения:
[ 14%] Building CXX object vcall/CMakeFiles/vcall.dir/v_call_facade.cpp.o
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.6.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name v_call_facade.cpp -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 236.3 -v -gdwarf-2 -coverage-file /Users/evgeny/repository/vcall/build-debug/vcall/CMakeFiles/vcall.dir/v_call_facade.cpp.o -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -D POSIX -D nullptr=NULL -D DEBUG_MODE -I /Users/evgeny/libraries/boost-1-53-static-x64/include -I /usr/local/include -I /Users/evgeny/repository/webrtc/trunk -I /Users/evgeny/repository/vcall -Wall -fdeprecated-macro -fdebug-compilation-dir /Users/evgeny/repository/vcall/build-debug/vcall -ferror-limit 19 -fmessage-length 315 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.6.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -vectorize-slp -o CMakeFiles/vcall.dir/v_call_facade.cpp.o -x c++ /Users/evgeny/repository/vcall/vcall/v_call_facade.cpp
clang -cc1 version 5.1 based upon LLVM 3.4svn default target x86_64-apple-darwin13.2.0

Флаги сборки библиотеки:
CXX(target) out/Debug/obj.target/libjingle/talk/xmpp/xmpppump.o
clang version 3.5.0 (trunk 206824)
Target: x86_64-apple-darwin13.2.0
Thread model: posix
"/Users/evgeny/repository/webrtc/trunk/third_party/llvm-build/Release+Asserts/bin/clang" -cc1 -triple x86_64-apple-macosx10.6.0 -emit-obj -mrelax-all -disable-free -main-file-name xmpplogintask.cc -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 224.1 -v -gdwarf-2 -coverage-file /Users/evgeny/repository/webrtc/trunk/out/Debug/obj.target/libjingle/talk/xmpp/xmpplogintask.o -resource-dir /Users/evgeny/repository/webrtc/trunk/third_party/llvm-build/Release+Asserts/bin/../lib/clang/3.5.0 -dependency-file out/Debug/.deps/out/Debug/obj.target/libjingle/talk/xmpp/xmpplogintask.o.d.raw -MT out/Debug/obj.target/libjingle/talk/xmpp/xmpplogintask.o -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -D V8_DEPRECATION_WARNINGS -D BLINK_SCALE_FILTERS_AT_RECORD_TIME -D EXPAT_RELATIVE_PATH -D FEATURE_ENABLE_VOICEMAIL -D GTEST_RELATIVE_PATH -D JSONCPP_RELATIVE_PATH -D LOGGING=1 -D SRTP_RELATIVE_PATH -D FEATURE_ENABLE_SSL -D FEATURE_ENABLE_PSTN -D HAVE_SRTP -D HAVE_WEBRTC_VIDEO -D HAVE_WEBRTC_VOICE -D USE_WEBRTC_DEV_BRANCH -D CHROMIUM_BUILD -D USE_LIBJPEG_TURBO=1 -D ENABLE_ONE_CLICK_SIGNIN -D ENABLE_REMOTING=1 -D ENABLE_WEBRTC=1 -D ENABLE_PEPPER_CDMS -D ENABLE_CONFIGURATION_POLICY -D ENABLE_INPUT_SPEECH -D ENABLE_NOTIFICATIONS -D ENABLE_HIDPI=1 -D DISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY -D SYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE -D ENABLE_EGLIMAGE=1 -D ENABLE_TASK_MANAGER=1 -D ENABLE_EXTENSIONS=1 -D ENABLE_PLUGIN_INSTALLATION=1 -D ENABLE_PLUGINS=1 -D ENABLE_SESSION_SERVICE=1 -D ENABLE_THEMES=1 -D ENABLE_AUTOFILL_DIALOG=1 -D ENABLE_BACKGROUND=1 -D ENABLE_GOOGLE_NOW=1 -D CLD_VERSION=2 -D ENABLE_FULL_PRINTING=1 -D ENABLE_PRINTING=1 -D ENABLE_SPELLCHECK=1 -D ENABLE_CAPTIVE_PORTAL_DETECTION=1 -D ENABLE_APP_LIST=1 -D ENABLE_SETTINGS_APP=1 -D ENABLE_MANAGED_USERS=1 -D ENABLE_SERVICE_DISCOVERY=1 -D LIBPEERCONNECTION_LIB=1 -D OSX -D HAVE_SCTP -D CARBON_DEPRECATED=YES -D HASH_NAMESPACE=__gnu_cxx -D POSIX -D DISABLE_DYNAMIC_CAST -D _REENTRANT -D SSL_USE_NSS -D HAVE_NSS_SSL_H -D SSL_USE_NSS_RNG  " /NSS_PLATFORM_CLIENT_AUTHwebrtc/trunk/third_party/llvm-build/Release+Asserts/bin/clang"  -D-NO_N PR_10_SUPPORT --Diple  xNSPR_STATIC-macosx10.6.0  --Dit-obj  -NSS_STATIC  --Dsable-free  -NSS_USE_STATIC_ IBS x-Dppump.cc  -USE_UTIL_DIRECTLY  p-D  -XML_STATIC  2-  -DYNAMIC_ANNOTATIO S_ENABLED=1 --Dlaxed-aliasing  -WTF_USE_DYNAM C_ANNOTATIONS=1 --Dnwind-tables  -_DEBUG-cpu  c-Ie2  -.arget-linker-version  2-I.1  -.  --Iwarf-2  -third_partyle  /-Iers/evgeny/repository/webrtc/trunk/out/Debug/obj.target/libjingle/talk/xmpp/xmpppump.o  -third_party/w brtc /-Iers/evgeny/repository/webrtc/trunk/third_party/llvm-build/Release+Asserts/bin/../lib/clang/3.5.0  -webrtcency-file  o-I/Debug/.deps/out/Debug/obj.target/libjingle/talk/xmpp/xmpppump.o.d.raw  -net third_party/nss/ssl o-I/Debug/obj.target/libjingle/talk/xmpp/xmpppump.o  -third_par y/nss/nspr/pr/include /-Iplications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk  -th rd_party/nss/nspr/lib/ds V-IDEPRECATION_WARNINGS  -th rd_party/nss/nspr/lib/libc/include B-INK_SCALE_FILTERS_AT_RECORD_TIME  -th rd_party/nss/nss/lib/base E-IAT_RELATIVE_PATH  -th rd_party/nss/nss/lib/certdb F-ITURE_ENABLE_VOICEMAIL  -th rd_party/nss/nss/lib/certhigh G-IST_RELATIVE_PATH  -th rd_party/nss/nss/lib/cryptohi J-INCPP_RELATIVE_PATH  -th rd_party/nss/nss/lib/dev L-IGING=1  -th rd_party/nss/nss/lib/freebl S-IP_RELATIVE_PATH  -th rd_party/nss/nss/lib/freebl/ecl F-ITURE_ENABLE_SSL  -th rd_party/nss/nss/lib/nss F-ITURE_ENABLE_PSTN  -th rd_party/nss/nss/lib/pk11wrap H-IE_SRTP  -th rd_party/nss/nss/lib/pkcs7 H-IE_WEBRTC_VIDEO  -th rd_party/nss/nss/lib/pki H-IE_WEBRTC_VOICE  -th rd_party/nss/nss/lib/smimeU-I_WEBRTC_DEV_BRANCH  -th rd_party/nss/nss/lib/softokenC-IOMIUM_BUILD  -th rd_party/nss/nss/lib/util U-I_LIBJPEG_TURBO=1  -th rd_party/expat/files/lib E-IBLE_ONE_CLICK_SIGNIN  -th rd_party/jsoncpp/overrides/include E-IBLE_REMOTING=1  -th rd_party/jsoncpp/source/include E-O0LE_WEBRTC=1  --W rror E-Wnewline-eofCDMS  --W ndif-labels E-Wno-unused-parameterOLICY  --W o-missing-field-initializers E-Wheader-hygieneCH  --W o-c++11-narrowing E-Wno-char-subscripts  --W o-unneeded-internal-declaration E-Wno-covered-s itch-default --W tring-conversion D-Wno-deprecated-register_SUPPORTED_NATIVELY  --W o-absolute-value S-Wno-selector-type-mismatchRY_PRESSURE  --s d=gnu++11 E-fdeprecated-macr  --f ebug-compilation-dir E/Users/evgeny/reposit ry/webrtc/trunk --f rror-limit ENABLE_EXTENSIONS=1 -D ENABLE_PLUGIN_IN TALLATION=1 0-  -ENABLE_PLUGI S=1 h-Dden  -ENABLE_SESSION_S RVICE=1 3-  -ENABLE_THEMES=  --Dlocks  -ENABLE_AUTOFILL_DIALOG=  --Dbjc-runtime=macosx-10.6.0  -ENABLE_BACKGROUND=1ock-signature  --Dxx-exceptions  -ENABLE_GOOGL _NOW=1 --Diagnostics-show-option  -CLD_VERSION=2  --D  oENABLE_FULL_PRINTING=1bjingle/talk/xmpp/xmpplogintask.o  --D  cENA LE_PRINTING=1 t-Dk/xmpp/xmpplogintask.cc ENABLE_SPELLCHECK=1 -D ENABLE_CAPTIVE_PORTAL_DETECTION=1 -D ENABLE_APP_LIST=1 -D ENABLE_SETTINGS_APP=1 -D ENABLE_MANAGED_USERS=1 -D ENABLE_SERVICE_DISCOVERY=1 -D LIBPEERCONNECTION_LIB=1 -D OSX -D HAVE_SCTP -D CARBON_DEPRECATED=YES -D HASH_NAMESPACE=__gnu_cxx -D POSIX -D DISABLE_DYNAMIC_CAST -D _REENTRANT -D SSL_USE_NSS -D HAVE_NSS_SSL_H -D SSL_USE_NSS_RNG -D NSS_PLATFORM_CLIENT_AUTH -D NO_NSPR_10_SUPPORT -D NSPR_STATIC -D NSS_STATIC -D NSS_USE_STATIC_LIBS -D USE_UTIL_DIRECTLY -D XML_STATIC -D DYNAMIC_ANNOTATIONS_ENABLED=1 -D WTF_USE_DYNAMIC_ANNOTATIONS=1 -D _DEBUG -I .  -O0 -Werror -Wnewline-eof -Wendif-labels -Wno-unused-parameter -Wno-missing-field-initializers -Wheader-hygiene -Wno-c++11-narrowing -Wno-char-subscripts -Wno-unneeded-internal-declaration -Wno-covered-switch-default -Wstring-conversion -Wno-deprecated-register -Wno-absolute-value -Wno-selector-type-mismatch -std=gnu++11 -fdeprecated-macro -fdebug-compilation-dir /Users/evgeny/repository/webrtc/trunk -ferror-limit 19 -fmessage-length 0 -fvisibility hidden -stack-protector 3 -mstackrealign -fblocks -fno-threadsafe-statics -fobjc-runtime=macosx-10.6.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -vectorize-slp -o out/Debug/obj.target/libjingle/talk/xmpp/xmpppump.o -x c++ talk/xmpp/xmpppump.cc
clang -cc1 version 3.5.0 based upon LLVM 3.5.0svn default target x86_64-apple-darwin13.2.0
based upon LLVM 3.5.0svn default target x86_64-apple-darwin13.2.0
  • Вопрос задан
  • 2792 просмотра
Подписаться 4 Оценить 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@leclecovich
Есть мнение, что проблема в optimization level, точнее в том что при Release сборке оптимизация есть, при Debug - нет. Например, попробуйте принудительно выставить для Release -O0, посмотрите на результат.

Ну а в целом - отладчик Вам в помощь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы