-
Notifications
You must be signed in to change notification settings - Fork 3
Description
В данный момент libwebrtc-sys
всегда линкуется с релизным билдом libwebrtc:
// TODO: rustc always links against non-debug Windows runtime, so we always
// use release build of libwebrtc.
// https://github.com/rust-lang/rust/issues/39016
println!(
"cargo:rustc-link-search=native=crates/libwebrtc-sys/lib/release/"
);
Причина там тоже указана, но есть подозрения что это все-таки возможно.
Сначала присобачим debug build:
println!( "cargo:rustc-link-search=native=crates/libwebrtc-sys/lib/debug/");
Начнет ругаться что хочет msvctrd
:
webrtc.lib(arg.obj) : error LNK2001: unresolved external symbol __imp__calloc_dbg
webrtc.lib(time_zone_format.obj) : error LNK2001: unresolved external symbol __imp__calloc_dbg
webrtc.lib(civil_time_detail.obj) : error LNK2001: unresolved external symbol __imp__calloc_dbg
webrtc.lib(cord.obj) : error LNK2001: unresolved external symbol __imp__calloc_dbg
webrtc.lib(int128.obj) : error LNK2001: unresolved external symbol __imp__calloc_dbg
webrtc.lib(audio_device_core_win.obj) : error LNK2001: unresolved external symbol __imp__calloc_dbg
webrtc.lib(parser.obj) : error LNK2001: unresolved external symbol __imp__calloc_dbg
webrtc.lib(bind.obj) : error LNK2001: unresolved external symbol __imp__calloc_dbg
Что логично, так как раст подкидывает только msvcrt
. Подкинем msvcrtd:
println!( "cargo:rustc-link-libe=dylib=msvcrtd");
После этого будет ругаться вот так:
libcxx-76ca93e71f442ad3.rlib(cxx.o) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MDd_DynamicDebu
g' in webrtc.lib(stun_prober.obj)
Это лечиться прокидыванием -MDd в флажки компилятора, например, вот таким вот образом:
./cargo/config
:
[env]
CXXFLAGS = "-MDd"
CFLAGS = "-MDd"
Также, можно заметить, что при линковке сейчас прокидывается msvcrtd.lib
, который мы прокидываем вручную, плюс раст еще сверху докидывается msvcrt.lib
. Это никак не ошибит, но есть подозрения, что прокидывать два CRT не самая лучшая идея. Это лечится таким образом:
./cargo/config
:
[build]
rustflags = ["-C", "link-args=/NODEFAULTLIB:msvcrt.lib"]
Теперь наблюдаем вот такую вот ошибку:
libcxx-76ca93e71f442ad3.rlib(cxx.o) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in webrtc.lib(stun_prober.obj)
Судя по всему, нужно прокидывать _ITERATOR_DEBUG_LEVEL=2
при компиляции libwebrtc. Дальше не ковырял.