日 落
1 weeks ago
Rust 要 cross compile,好像需要自己先把開發環境裝好才能動得起來
不過我要去哪裡找 Linux 版本的 link.exe @@
latest #32
貝哥哥_鍵鼠叔
1 weeks ago
從 mingw cross 過去?
日 落
1 weeks ago
不懂,我在 linux 上將 --target 指定為 windows msvc,然後會顯示 link.exe not found
感覺要自己想辦法現在當下環境,把其他環境的開發工具先安裝好?
釣不到猴子的有人島民
1 weeks ago @Edit 1 weeks ago
zeroplex: 不能msvc (很明顯msvc完全是windows only)
只能用 gnu (mingw)
立即下載
不過搞不好能用wine硬幹? 肯定是不支援的玩法就是了
日 落
1 weeks ago
danny8376: 感謝
這樣來說,如果我要在 linux 上編譯 for windows,我需要事先安裝該 target 的 build tools?
是 所有crosscompile都是這樣
日 落
1 weeks ago
但我沒印象中使用 golang 時有安裝不同的 build tools,但他可以直接編譯出其他架構的執行檔
你把 CGO 打開就會遇到了…
那是因為 golang 預設沒有依賴 libc 不需要 target system 的 build tools
但如果你把 CGO 開起來 他就會去 link libc 這時候你就會遇到沒有 linker 的問題ㄌ
danny8376: 能不能用 llvm + ucrt 啊? 不熟 rust
日 落
1 weeks ago
這樣我懂了,都是依賴關係的問題 www
rust本身就依靠llvm也能生llvm-ir
稍微查了下確實有人搞linux上cross compile msvc
Cross compiling Windows binaries from Linux
實際上rust也沒寫死msvc只能用msvc toolchain可以override改用llvm或其他你高興的
不過裝windows的lib又是個麻煩... 但也不是問題了(
但看起來還是有小問題就是 asm一直都很麻煩(
danny8376: 因為有這套能用GitHub - mstorsjo/llvm-mingw: An LLVM/Clang/LLD base...這樣就不一定要 msvc 才能 build msvcrt/ucrt 的版本了
這就是用mingw啊
danny8376: 對但他會用 ucrt/msvcrt 做 C runtime
所以可以跟其他 msvc build 做 link
日 落
1 weeks ago
是 interface 一樣,所以可以接 msvc 的意思嗎?
zeroplex: 用同一套 c runtime
日 落
1 weeks ago
好複雜
c runtime 功能很多
舉個例子像是記憶體管理 malloc 是 crt 實作的
如果你同時使用兩套或以上的 crt 那你的記憶體管理就有可能會一團亂
例如在 A malloc 的記憶體在 B 沒辦法正常地 free
日 落
1 weeks ago
我一直以為 C 編譯後就是 asm 讓系統直接執行,剛剛才知道還有 runtime
那可差多了
沒有這些 runtime 在背後幫忙哪裡來這麼多預設 function 可以用XD
日 落
1 weeks ago @Edit 1 weeks ago
standard library 算是 runtime 嗎?
我以為的 runtime 是類似直譯器將將程式轉譯給作業系統執行,而不是函式庫
是 跟你理解的不太一樣
日 落
1 weeks ago
我還是覺得他比較像是函式庫,因為不是一定要用你所不知道的 C 語言: 執行階段程式庫 (CRT) - HackMD
l• ܫ•) Davyキュルッ
1 weeks ago @Edit 1 weeks ago
你可以不需要 crt 但你會少很多東西可以用
CRT 的 RT 就是 runtime 呀

這裡的 runtime 跟你理解的不太一樣
日 落
1 weeks ago
我之前的確也嘗試不適用 std 來輸出文字,累死沒成功
另外友人又給我一個題目,韌體儲存空間最多 4 KB ,要想辦法把執行檔縮小 (聽說這個就不能用 std lib)
4KB 的很多都要自己想辦法實作了
david50407: 不 mingw本身就是一個把msvcrt/ucrt裝成glibc的wrapper了啊
日 落
1 weeks ago
david50407: 我知道你的意思了,VC 用的的確都跟其他不同,所以真的要編譯就必須把他的 lib 和工具全部拉下來
l• ܫ•) Davyキュルッ
1 weeks ago @Edit 1 weeks ago
danny8376: 不不不 這個 toolchain 是讓你可以直接用 windows header 跟直接 soft link ucrt/msvcrt
mingw 的部分只有這個 toolchain 本身是用 mingw 而已
產物並不包含及依賴 mingw(當然也不是使用 glibc)
danny8376: 他也有直接跟你說 我跟其他 mingw 的東西用的 crt 不同,所以不能混用

LLD, the LLVM linker, is what causes most of the major differences to the normal GCC/binutils based MinGW.

As this toolchain uses a different CRT and C++ standard library than most mingw toolchains, it is incompatible with object files and static libraries built with other toolchains.
back to top