rust-cross/cargo-xwin

Fail to link C++ std

Closed this issue · 3 comments

I tried to build project with https://github.com/rust-skia/rust-skia but it makes error when I tried to build with xwin,

error: linking with `lld-link` failed: exit status: 1
  |
  = note: LC_ALL="C" PATH="/home/namse/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin:/home/namse/.local/bin:/usr/bin:/home/namse/.vscode-server/bin/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2/bin/remote-cli:/home/namse/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/android-sdk/tools/bin:/usr/lib/android-sdk/platform-tools:/usr/lib/android-sdk/cmdline-tools/latest/bin:/home/namse/.cache/cargo-xwin" VSLANG="1033" "lld-link" "-flavor" "link" "/NOLOGO" "/tmp/rustcmpCc3q/symbols.o" "/home/namse/namseent/namui/sample/rect/target/namui/target/x86_64-pc-windows-msvc/debug/deps/namui_runtime_x86_64_pc_windows_msvc.rect-0b8dba757410072d.11gq2n56xg0uouz2.rcgu.o.rcgu.o" "/LIBPATH:/home/namse/namseent/namui/sample/rect/target/namui/target/x86_64-pc-windows-msvc/debug/deps" "/LIBPATH:/home/namse/namseent/namui/sample/rect/target/namui/target/debug/deps" "/LIBPATH:/home/namse/.cache/cargo-xwin/xwin/crt/lib/x86_64" "/LIBPATH:/home/namse/.cache/cargo-xwin/xwin/sdk/lib/um/x86_64" "/LIBPATH:/home/namse/.cache/cargo-xwin/xwin/sdk/lib/ucrt/x86_64" "/LIBPATH:/home/namse/namseent/namui/sample/rect/target/namui/target/x86_64-pc-windows-msvc/debug/build/skia-bindings-f2ce96920157071e/out/skia" "/LIBPATH:/home/namse/.cargo/registry/src/index.crates.io-6f17d22bba15001f/windows_x86_64_msvc-0.52.0/lib" "/LIBPATH:/home/namse/.cargo/registry/src/index.crates.io-6f17d22bba15001f/windows_x86_64_msvc-0.48.5/lib" "/LIBPATH:/home/namse/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-msvc/lib" "/home/namse/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-msvc/lib/libcompiler_builtins-3447ff57d35e742b.rlib" "advapi32.lib" "cfgmgr32.lib" "fwpuclnt.lib" "gdi32.lib" "kernel32.lib" "msimg32.lib" "ntdll.lib" "opengl32.lib" "shell32.lib" "shlwapi.lib" "user32.lib" "winspool.lib" "ws2_32.lib" "windows.0.52.0.lib" "windows.0.52.0.lib" "skia.lib" "skia-bindings.lib" "usp10.lib" "ole32.lib" "user32.lib" "gdi32.lib" "fontsub.lib" "d3d12.lib" "dxgi.lib" "d3dcompiler.lib" "bcrypt.lib" "advapi32.lib" "ntdll.lib" "windows.0.48.5.lib" "kernel32.lib" "advapi32.lib" "bcrypt.lib" "kernel32.lib" "ntdll.lib" "userenv.lib" "ws2_32.lib" "kernel32.lib" "ws2_32.lib" "kernel32.lib" "msvcrt.lib" "/NXCOMPAT" "/LIBPATH:/home/namse/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-msvc/lib" "/OUT:/home/namse/namseent/namui/sample/rect/target/namui/target/x86_64-pc-windows-msvc/debug/deps/namui_runtime_x86_64_pc_windows_msvc.exe" "/OPT:REF,ICF" "/DEBUG"
  = note: lld-link: error: undefined symbol: __std_max_element_2
          >>> referenced by skia.lib(skia.SkSLRasterPipelineBuilder.obj):(public: void __cdecl SkSL::RP::Program::Dumper::dump(class SkWStream *, bool))
          >>> referenced by skia.lib(skia.SkSLRasterPipelineBuilder.obj):(public: class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>> __cdecl SkSL::RP::Program::Dumper::swizzlePtr<unsigned short const>(void const *, class SkSpan<unsigned short const>) const)
          
          lld-link: error: undefined symbol: __std_max_element_1
          >>> referenced by skia.lib(skia.SkSLRasterPipelineBuilder.obj):(public: class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>> __cdecl SkSL::RP::Program::Dumper::swizzlePtr<unsigned char>(void const *, class SkSpan<unsigned char>) const)
          
          lld-link: error: undefined symbol: __std_find_trivial_8
          >>> referenced by skia.lib(skia.SkNWayCanvas.obj):(public: virtual void __cdecl SkNWayCanvas::removeCanvas(class SkCanvas *))
          >>> referenced by skia.lib(skia.SkSLFindAndDeclareBuiltinFunctions.obj):(void __cdecl SkSL::Transform::FindAndDeclareBuiltinFunctions(struct SkSL::Program &))
          >>> referenced by skia.lib(skia.SkSLFindAndDeclareBuiltinVariables.obj):(public: void __cdecl SkSL::Transform::`anonymous namespace'::BuiltinVariableScanner::addDeclaringElement(class Transform::Symbol const *))
          
          lld-link: error: undefined symbol: __std_find_trivial_4
          >>> referenced by skia.lib(spirv_cross.spirv_cfg.obj):(private: void __cdecl spirv_cross::CFG::add_branch(unsigned int, unsigned int))
          >>> referenced by skia.lib(spirv_cross.spirv_cfg.obj):(private: void __cdecl spirv_cross::CFG::add_branch(unsigned int, unsigned int))
          

error: could not compile `namui-runtime-x86_64-pc-windows-msvc` (bin "namui-runtime-x86_64-pc-windows-msvc") due to previous error

I'm using ubuntu and clang is already installed. Somebody said it would be fixed by linking stdc++ but I have no idea.

Ok, I found the reason to fail.

Linker fail to get msvcprt.lib so it made above errors.
Somehow my xwin setting was ~/.cache/cargo-xwin/xwin/crt/lib/x86_64, but actually it was installed at ``~/.xwin-cache/splat/crt/lib/x86_64`.

Something is wrong. My window's msvcprt.lib has __std_max_element_2 symbol but the xwin-downloaded didn't.

Updating xwin manifest 17 fixed this problem. good luck guys