Porting Linux code to Windows

HW Yang
2 min readSep 17, 2020

--

最近的工作需要把一些只能跑在 Linux 上的 open source code 移植到 Windows, 例如 libmigdb.

原本以為用 MinGW 就可輕鬆解決, 但沒想到 mingw 沒有實作 fork(), waitpid(), 等函式. 只有 Cygwin 才有辦法, 因為他支援更完整的 POSIX API. 但無奈 Cygwin 編譯時間太久, 無法採用.

上 google 做一些功課後發現, Windows 的 C Runtime Library[1]至少有提供檔案, 記憶體, 字串, 數學等函式可以用. 其他找不到的函式, 像是 sleep(), 則可以靠 MinGW 幫忙.

但像 fork() 這種很 POSIX 的函式就無法靠 MinGW 了, 因為 fork() 的行為與 Windows 的 process management 差異甚大, 除非是像 Cygwin[2] 或是 WSL, 實現一層模擬層, 才有可能支援 fork().

[1] https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/crt-alphabetical-function-reference?view=vs-2019

[2] https://stackoverflow.com/questions/985281/what-is-the-closest-thing-windows-has-to-fork

[3] https://lionrex.pixnet.net/blog/post/117953664

[4] https://en.wikipedia.org/wiki/POSIX#POSIX_for_Microsoft_Windows

--

--

HW Yang
HW Yang

No responses yet