-
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. Дальше не ковырял.