Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Link libwebrtc-sys against debug libwebrtc build #12

Open
alexlapa opened this issue Nov 15, 2021 · 0 comments
Open

Link libwebrtc-sys against debug libwebrtc build #12

alexlapa opened this issue Nov 15, 2021 · 0 comments
Assignees
Labels
enhancement Improvement of existing features or bugfix k::toolchain Applies to changes of project toolchain platform::windows Specific to Windows platform

Comments

@alexlapa
Copy link

alexlapa commented Nov 15, 2021

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

@alexlapa alexlapa added enhancement Improvement of existing features or bugfix k::toolchain Applies to changes of project toolchain labels Nov 15, 2021
@alexlapa alexlapa self-assigned this Nov 15, 2021
@tyranron tyranron added the platform::windows Specific to Windows platform label Dec 25, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Improvement of existing features or bugfix k::toolchain Applies to changes of project toolchain platform::windows Specific to Windows platform
Projects
None yet
Development

No branches or pull requests

2 participants