çŸåšãgoãªã³ã«ãŒãmsvcãªããžã§ã¯ããã¡ã€ã«ããªã³ã¯ã§ããªãããšãç解ããŠããŸãããŸãããã®åé¡ã®åªå 床ãäœãå¯èœæ§ãããããšãèªèããŠããŸãã ãã ããããããµããŒããããšãWindowsã¯ãŒã¯ãããŒãããããç°¡çŽ åãããã®ã§äŸ¿å©ã§ãã ãã®åé¡ã¯äž»ã«ããããã©ãã ãã®åªåãããããããã³/ãŸãã¯äœãå¿ èŠã«ãªãããç解ããããšã§ãã
/ cc @alexbrainman
@xoviatããªããæ±ããŠããåé¡ã¯äœã§ããïŒ ããã§åçŸã§ããå¿ èŠããããŸãã ãããã£ãŠããããåçŸããããã«åŸãå¿ èŠã®ãããã¹ãŠã®æé ãæäŸããŠãã ããã
ããããšãããããŸãã
ã¢ã¬ãã¯ã¹
PSïŒç§ã¯7ææ«ãŸã§ã³ã³ãã¥ãŒã¿ãŒãæã£ãŠããŸããã ããã§ã¯ãããèŠãŠãããŸãã
ããªããæ±ããŠããåé¡ã¯äœã§ããïŒ
ãŸã è©ŠããŠããŸããããmsvcãªããžã§ã¯ããã¡ã€ã«ã®cé¢æ°ã.sysoãšããŠgoãªã³ã«ãŒã§ãªã³ã¯ããããšã«ãããå ·äœçã«åŒã³åºããããšæããŸãã ç§ãèªãã ãã¹ãŠã®ããšã¯ããããäžå¯èœã§ããããšã瀺ããŠããŸãããçºçããç¹å®ã®ãšã©ãŒãåçŸããããã®æé ãäœæããŸãã
å ·äœçã«ã¯ãmsvcãªããžã§ã¯ããã¡ã€ã«ã®cé¢æ°ã.sysoãšããŠgoãªã³ã«ãŒã§ãªã³ã¯ããŠåŒã³åºããŸãã
ããããDLLã«çµã¿èŸŒãã§ãDLLå ãã䜿çšããŠã¿ãŸãããïŒ
çºçããç¹å®ã®ãšã©ãŒãåçŸããæé ãäœæããŸãã
ããŠãã ããã ããããšãããããŸããã
ã¢ã¬ãã¯ã¹
ããããDLLã«çµã¿èŸŒãã§ãDLLå ãã䜿çšããŠã¿ãŸãããïŒ
ãããç§ã®åœåã®èšç»ã§ããã ç§ã¯swigã䜿çšããŠããã®ã§ãçæãããcã³ãŒããåå¥ã«ã³ã³ãã€ã«ããŠãããDLLãšã¯ã¹ããŒããšããŠé¢æ°ãæžãçŽãã®ã¯ããŸã䟿å©ã§ã¯ãããŸããã é£ããããšã§ã¯ãããŸããããgccã䜿çšããã¯ãŒã¯ãããŒãgo generate; go build
ã ãã®å Žåã¯é¢åã§ãã
äºè§£ããŸãããæé ããããŸãã ãããã®ãã¡ã€ã«ããå§ããŸãã
hello.goïŒ
package main
/*
extern void hello();
*/
import "C"
func main() {
C.hello()
}
ããã«ã¡ã¯CïŒ
#include <stdio.h>
extern void hello()
{
printf("Hello World from C");
}
次ã«ã次ã®ã³ãã³ããå®è¡ããŸãïŒãã¹ã«msvcã䜿çšïŒã
cl /c hello.c
mv hello.obj hello.syso
mv hello.c hello.c.bak
go build
çµæïŒ
Warning: corrupt .drectve at end of def file
çæããããã¡ã€ã«ãå®è¡ããå ŽåïŒ
Exception 0xc0000005 0x8 0x13 0x13
PC=0x13
signal arrived during external code execution
main._Cfunc_hello()
_//_obj/_cgo_gotypes.go:41 +
main.main()
C://hello.go:9 +0x27
goroutine 17 [syscall, locked to thread]:
runtime.goexit()
C:/Program Files/Go/src/runtime/asm_amd64.s:2197 +0x1
rax 0x4a5960
rbx 0xc042045f78
rcx 0x4a9a20
rdi 0xc042045f78
rsi 0x4adc60
rbp 0xc042045f38
rsp 0x6dfd68
r8 0xc042016340
r9 0x0
r10 0xc04204faa0
r11 0x4783c2
r12 0x0
r13 0x6
r14 0x0
r15 0xf1
rip 0x13
rflags 0x10216
cs 0x33
fs 0x53
gs 0x2b
PCã«clã³ãã³ããã€ã³ã¹ããŒã«ãããŠããŸããã msvcãã€ã³ã¹ããŒã«ããã«ã¯ã©ãããã°ããã§ããïŒ
ããããšãããããŸããã
ã¢ã¬ãã¯ã¹
ããã«ããã«ãããŒã«2017ããå¿ èŠ
c ++ã ããåé¡ã§ãªããã°ãç§ã¯ããã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã ãããããããªã®ã§ãçã¿ã¯ç¶ããŸã...
ããã«ããã«ãããŒã«2017ããå¿ èŠã§ãã
ãšã£ãã ããããšãããããŸããã
åé¡ãå€ãããå Žåã¯ãå¿ èŠã«å¿ããŠãªããžã§ã¯ããã¡ã€ã«ãæäŸã§ããŸãã
ã¯ããhello.objãã©ããã«æçš¿ããŠãã ããã
ããã«ã€ããŠããå°ãèããŠã¿ãŠãã ããã å®éã«ã¯ãgccã䜿çšããŠãmsvcã³ã³ãã€ã©ã§ã³ã³ãã€ã«ããããªããžã§ã¯ããã¡ã€ã«ããªã³ã¯ããŠããŸãã æŒç¿ãè©ŠããŠã¿ãããšãã§ããŸããããgobuildãã¹ããããgccã«çœ®ãæããŠhello.objãCããã°ã©ã ã«ãªã³ã¯ããŸããïŒ ããããããã¯ä»¥åã«è¡ãããããšããããŸãã ãã®æ¹æ³ãç¥ã£ãŠããã°ãGoã§ãåæ§ã®ããšãã§ããã®ã§ã¯ãªãããšæããŸãã
ã¢ã¬ãã¯ã¹
AFAIK lld https://github.com/llvm-mirror/lldã¯ãmsvcãªããžã§ã¯ããã¡ã€ã«ããµããŒãããŸãã
ãªããžã§ã¯ããã¡ã€ã«ã¯ããã«ãããŸãïŒ https ïŒ
lldhttps ïŒ//github.com/llvm-mirror/lldã¯msvcãªããžã§ã¯ããã¡ã€ã«ããµããŒãããŸã
Goã¯ãWindowsã§ã¯gccãªã³ã«ãŒïŒlldã§ã¯ãªãïŒã䜿çšããŸãã
ãªããžã§ã¯ããã¡ã€ã«ã¯ããã«ãããŸãïŒ https ïŒ
8æã«åž°å® ããããã£ãŠã¿ãŸãã ããããšãããããŸããã
ã¢ã¬ãã¯ã¹
Goã¯ãWindowsã§ã¯gccãªã³ã«ãŒïŒlldã§ã¯ãªãïŒã䜿çšããŸãã
ç¥ã£ãŠããã ããããlldã¯msvcãªããžã§ã¯ã圢åŒã®æé«ã®ãªãŒãã³ãœãŒã¹ããã¥ã¡ã³ãã§ãã
ç§ã¯å®éã«ldããåããšã©ãŒãåãåãã®ã§ããšã©ãŒã¯ééããªãldããæ¥ãŠããŸãã
ç§ã¯å®éã«ldããåããšã©ãŒãåãåãã®ã§ããšã©ãŒã¯ééããªãldããæ¥ãŠããŸãã
ã¯ãã msvcã§ããŒããã³ã³ãã€ã«ããgccã§ãªã³ã¯ããŠãCããã°ã©ã ããã«ãããæ¹æ³ãç解ããå¿ èŠããããŸãã
ã¢ã¬ãã¯ã¹
ç§ã®ç¡ç¥ãèš±ããŠãã ããããããæ£ç¢ºã«äœãgccãªã³ã¯ããŠããŸããïŒ goãªã³ã«ã®åºåããªã³ã¯ããŠããŸããïŒ
elfã«å€æãããªããžã§ã¯ããã¡ã€ã«ã§objconvãå®è¡ããŸãã
objconv -felf hello.obj hello.syso
çŸåšã次ã®ãšã©ãŒãçºçããŠããŸãã
hello.syso: In function `__local_stdio_printf_options':
(.text$mn+0x3): undefined reference to `?_OptionsStorage@?1??__local_stdio_printf_options@@9<strong i="9">@9</strong>'
hello.syso: In function `_vfprintf_l':
(.text$mn+0x3a): undefined reference to `__stdio_common_vfprintf'
hello.syso: In function `printf':
(.text$mn+0x28): undefined reference to `__acrt_iob_func'
collect2.exe: error: ld returned 1 exit status
ããããstdioã¯ç«ã¡å ¥ãçŠæ¢ã§ããïŒ
ç§ã®ç¡ç¥ãèš±ããŠãã ããããããæ£ç¢ºã«äœãgccãªã³ã¯ããŠããŸããïŒ goãªã³ã«ã®åºåããªã³ã¯ããŠããŸããïŒ
Goããã°ã©ã ãäœæããã«ã¯ã次ã®2ã€ã®ããã°ã©ã ã䜿çšããŸãã
æã ïŒããã±ãŒãžã®1ã€ãCgoã䜿çšããå ŽåïŒãGoãªã³ã«ãŒã¯å€éšãªã³ã«ãŒãåŒã³åºããŠCã«å®è£ ãããŠãããã¹ãŠã®ããããæ€çŽ¢ããŸããCã³ãŒãããprintfãåŒã³åºããšæ³åããŠãã ããã C printfã§ã³ã³ãã€ã«ãããã³ãŒãã¯Goå®è¡å¯èœãã¡ã€ã«ã®äžéšã§ããå¿ èŠããããŸãããGoãªã³ã«ãŒã¯ãããã©ãã§ååŸããããç¥ããŸããã ãããã£ãŠãGoãªã³ã«ãŒã¯å€éšãªã³ã«ãŒãåŒã³åºããŠãã®ã³ãŒããå«ããŸãã
Current Goã¯ãgccã³ã³ãã€ã©/ãªã³ã«ãŒã䜿çšããŠCã³ãŒããã³ã³ãã€ã«ããã³ãªã³ã¯ããŸãïŒmingw gccã䜿çšããŸãïŒã å¥ã®ã³ã³ãã€ã©ïŒMicrosoft補ïŒã§Cã³ãŒããã³ã³ãã€ã«ããå Žåã¯ã察å¿ãããªã³ã«ïŒMicrosoft補ïŒã䜿çšããŠãã³ã³ãã€ã©ãäœæãããã¹ãŠã®å€éšCã³ãŒããèŠã€ããå¿ èŠããããŸãã
ã ãããç§ã¯gccãªã³ã«ãŒã䜿çšããããšãææ¡ããããšã«ã€ããŠééã£ãŠãããšæããŸãã äžè¬çãªã·ããªãªã§ã¯ãMicrosoftã³ã³ãã€ã©ãšãªã³ã«ã®äž¡æ¹ã䜿çšããå¿ èŠããããŸãã Microsoftãªã³ã«ãŒãå ¥åãšããŠäœãå¿ èŠãšããããç解ããããã«äžèŽãããå¿ èŠããããŸãã
Cã³ãŒãã«å€éšã³ãŒãããªãå Žåã¯ãMCãªã³ã«ãŒããªããŠãåé¡ã解決ããå¯èœæ§ããããŸãã æ¬åœã«åçŽãªCããã°ã©ã ïŒ2ã€ã®æŽæ°ãªã©ãè¿œå ããããã°ã©ã ãªã©ïŒãè©ŠããŠã¿ãŠãã ããã ããã¯ãäžèšã§èª¬æããããã«æ©èœããå¯èœæ§ããããŸãã
ã¢ã¬ãã¯ã¹
ããããstdioã¯ç«ã¡å ¥ãçŠæ¢ã§ããïŒ
ãã®ã³ãŒããèŠã€ããã«ã¯ãMicrosoftãªã³ã«ãŒãåŒã³åºãå¿ èŠããããšæããŸãã
ã¢ã¬ãã¯ã¹
ããããããŸããã
objconv -felf hello.obj hello.syso
ãã¶ããããªãã¯ãšã«ãã®ä»£ããã«coffãomfããã£ãŠã¿ãã¹ãã§ããïŒ
ãã¶ããããªãã¯ãšã«ãã®ä»£ããã«coffãomfããã£ãŠã¿ãã¹ãã§ããïŒ
@xoviatã¯ãã.objãã¡ã€ã«ãelfã«å€æããªãã§ãã ãããWindowsããŒãžã§ã³ã®gccã¯ãä»ã®Windowsã³ã³ãã€ã©ãšåãããã«pe / coffãã¡ã€ã«ãçæããŸãã
ã¢ã¬ãã¯ã¹
Goãªã³ã«ã¯ãå€éšãªã³ã«ãåŒã³åºããŠãCã§å®è£ ãããŠãããã¹ãŠã®ããããæ€çŽ¢ããŸãã
䜿çšãããç¹å®ã®ã³ãã³ãã¯äœã§ããïŒ mingwã³ãã³ããç¥ã£ãŠããå Žåã¯ããã¡ã€ã«æ¯èŒãã¹ããã©ã£ãŠãmingwãåºåããŠãããã®ãšmsvcãäžèŽãããããšããããšãã§ããŸãã
go build -ldflags=-v
å®è¡ãããšãæ£ç¢ºãªã³ã¡ã³ãã確èªã§ããŸãã
ããŠãç§ãèšããããšããïŒ
ld (link -> go.obj) + (gcc -> obj files) ==> a.out.exe
Goã¯ããããã®ãã¡ã€ã«ã䜿çšããŠäžæãã£ã¬ã¯ããªãäœæããŠããããã«èŠããŸãã äžæãã£ã¬ã¯ããªãä¿åããŠããã®å 容ãæ€æ»ã§ããããã«ããæ¹æ³ã¯ãããŸããïŒ
go build -work
è©Šããã ãã
WORK=C:\Users\mattn\AppData\Local\Temp\go-build566171254
ãªããžã§ã¯ããã¡ã€ã«ã¯ãã®ãã£ã¬ã¯ããªã«æ®ã£ãŠããŸãã
-work
ãªãã·ã§ã³ã¯ãå®éã«ã¯ãªã³ã«ãŒãäœæããäžæãã¡ã€ã«ãä¿æããŸããã çŸæç¹ã§ã¯ããã£ã¬ã¯ããªãåé€ããªãããã«ãªã³ã«ãœãŒã¹ãç·šéããå¿
èŠããããŸãã ãããããäœããã®æ¹æ³ã§ãã®ããã®ãªãã·ã§ã³ãè¿œå ããå¿
èŠããããŸãã
çŸæç¹ã§ã¯ããã£ã¬ã¯ããªãåé€ããªãããã«ãªã³ã«ãœãŒã¹ãç·šéããå¿ èŠããããŸãã
ãããããã°ããããHEADã«å®è£ ããããŸã§åŸ ã£ãŠãç¹°ãè¿ãäœæ¥ããå¿ èŠããªãããã«ããŸãã
äžæãã£ã¬ã¯ããªãä¿åããŠããã®å 容ãæ€æ»ã§ããããã«ããæ¹æ³ã¯ãããŸããïŒ
cmd / linkããã°ã©ã ã«ã¯ãã®ããã®-tmpdirãã©ã°ããããŸãã ããªãã¯ããããã®ããã«äœ¿ãããšãã§ããŸãïŒ
c:\Users\Alex\dev\src\a>dir
Volume in drive C has no label.
Volume Serial Number is 9012-A870
Directory of c:\Users\Alex\dev\src\a
06/08/2017 02:02 PM <DIR> .
06/08/2017 02:02 PM <DIR> ..
06/08/2017 02:02 PM 77 main.go
1 File(s) 77 bytes
2 Dir(s) 430,809,088,000 bytes free
c:\Users\Alex\dev\src\a>type main.go
package main
import "fmt"
import "C"
func main() {
fmt.Println("Hello")
}
c:\Users\Alex\dev\src\a>go build -o a.exe -ldflags="-tmpdir=c:\Users\Alex\dev\src\a" main.go
c:\Users\Alex\dev\src\a>dir
Volume in drive C has no label.
Volume Serial Number is 9012-A870
Directory of c:\Users\Alex\dev\src\a
06/08/2017 02:02 PM <DIR> .
06/08/2017 02:02 PM <DIR> ..
06/08/2017 02:02 PM 2,055 000000.o
06/08/2017 02:02 PM 22,376 000001.o
06/08/2017 02:02 PM 2,017,382 a.exe
06/08/2017 02:02 PM 135 fix_debug_gdb_scripts.ld
06/08/2017 02:02 PM 2,402,226 go.o
06/08/2017 02:02 PM 77 main.go
06/08/2017 02:02 PM 24 trivial.c
7 File(s) 4,444,275 bytes
2 Dir(s) 430,804,631,552 bytes free
c:\Users\Alex\dev\src\a>
ã¢ã¬ãã¯ã¹
ããã¯ç§èªèº«ã®åç §çšã§ãããããã¯msvcã«ç§»æ€ããå¿ èŠããããŸãã
_cgo_sys_thread_start(ThreadStart *ts)
{
uintptr_t thandle;
thandle = _beginthread(threadentry, 0, ts);
if(thandle == -1) {
fprintf(stderr, "runtime: failed to create new OS thread (%d)\n", errno);
abort();
}
}
static void
threadentry(void *v)
{
ThreadStart ts;
ts = *(ThreadStart*)v;
free(v);
ts.g->stackhi = (uintptr)&ts;
ts.g->stacklo = (uintptr)&ts - STACKSIZE + 8*1024;
/*
* Set specific keys in thread local storage.
*/
__asm {
"movq %0, %%gs:0x28\n" // MOVL tls0, 0x28(GS)
"movq %%gs:0x28, %%rax\n" // MOVQ 0x28(GS), tmp
"movq %1, 0(%%rax)\n" // MOVQ g, 0(GS)
:: "r"(ts.tls), "r"(ts.g) : "%rax"
}
crosscall_amd64(ts.fn);
}
ç§ã¯çµã¿ç«ãŠã«ãŸã£ããæ £ããŠããªãã®ã§ããã®ã¿ã¹ã¯ãå®äºããã®ã«ãããæéãéå°è©äŸ¡ããããšã¯ãããŸããã
ãŸããæªå®çŸ©ã®ã·ã³ãã«ïŒ
ããŠãäºæ³ãããæ©ãããã«æ²¿ã£ãŠç§»åããŸãïŒ
ãã¹ãŠïŒ asm_amd64.sã¯goã®ã¢ã»ã³ãã©ãŒïŒå¥æ°ã®ã¢ã»ã³ããªãŒã䜿çšïŒãŸãã¯gccã®ã¢ã»ã³ãã©ãŒã«ãã£ãŠã¢ã»ã³ãã«ãããŠããŸããïŒ
gccã¯ãããã¢ã»ã³ãã«ããªãããã§ããã€ãŸããããããã¢ã»ã³ãã«ã«ãªããŸãã ãããŠãåé¡ã¯æ¬¡ã®ããã«ãªããŸããgoã¢ã»ã³ãã©ã䜿çšããŠãªããžã§ã¯ãã«ã¢ã»ã³ãã«ããæ¹æ³ã
ç®çã¯ãruntime / cgo / asm_amd64.sãGoãªããžã§ã¯ãã«ã¢ã»ã³ãã«ãããcmd / linkãä»ã®ãã¹ãŠã®Goãªããžã§ã¯ããšäžç·ã«åäžã®ã·ã¹ãã ãªããžã§ã¯ãã«ãªã³ã¯ããã·ã¹ãã ãªã³ã«ãŒããã®åäžã®ã·ã¹ãã ãªããžã§ã¯ããšãã¹ãŠã®æçµçãªããã°ã©ã ãžã®cgoã®äŸåé¢ä¿ã
ãã¹ãç®çã§ä»ã®ãšãããã®ãªããžã§ã¯ããã¢ã»ã³ãã«ããæ¹æ³ã¯ãããŸããïŒ goãé€ããŠgcc -c asm_amd64.s
ããã«ïŒ
ç®çã¯ãruntime / cgo / asm_amd64.sãGoãªããžã§ã¯ãã«ã¢ã»ã³ãã«ãããcmd / linkãä»ã®ãã¹ãŠã®Goãªããžã§ã¯ããšäžç·ã«åäžã®ã·ã¹ãã ãªããžã§ã¯ãã«ãªã³ã¯ããã·ã¹ãã ãªã³ã«ãŒããã®åäžã®ã·ã¹ãã ãªããžã§ã¯ããšãã¹ãŠã®æçµçãªããã°ã©ã ãžã®cgoã®äŸåé¢ä¿ã
ãããŸã§ã®ãšãããç§ã¯ãããã®ãªããžã§ã¯ããèŠã€ããŸããïŒ
_cgo_.o
ïŒgccã«ãã£ãŠçæããã䜿çšã§ããŸããgo.o
ãæ倧ã®ãªããžã§ã¯ãã§ãã
@ianlancetaylor
ããªãã®èšã£ãããšã¯æ£ãããªããšæããŸãã crosscall_amd64
ã¯000001.oã«ãããŸããããã®ãã¡ã€ã«ã«ã¯ããã¹ãŠã®goã³ãŒãããå«ãŸããŠããŸããã
000001.o: file format pe-x86-64
SYMBOL TABLE:
[201](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000000440 crosscall_amd64
[206](sec 0)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000000000 free
ãã®ãã¡ã€ã«ã¯æããã«gccã«ãã£ãŠçæããããã®ã§ãããããã»ã¹ãé ãããŸãã
ãã¹ãç®çã§ä»ã®ãšãããã®ãªããžã§ã¯ããã¢ã»ã³ãã«ããæ¹æ³ã¯ãããŸããïŒ goãé€ããŠgcc-c asm_amd64.sã®ããã«ïŒ
asm_amd64.sã¯ã©ã³ã¿ã€ã ããã±ãŒãžã®äžéšã§ãã ãgobuildãã³ãã³ããasm_amd64.sãã¡ã€ã«ãã©ã®ããã«äœ¿çšãããã次ã®ããã«ç¢ºèªã§ããŸãã
$ touch asm_amd64.s
$ GOOS=windows go build -x runtime 2>&1 | grep asm_amd64.s
/home/a/go/pkg/tool/linux_amd64/asm -trimpath $WORK -I $WORK/runtime/_obj/ -I /home/a/go/pkg/include -D GOOS_windows -D GOARCH_amd64 -o $WORK/runtime/_obj/asm_amd64.o ./asm_amd64.s
$
ã¢ã¬ãã¯ã¹
ããããšãã
ã·ã³ãã«crosscall_amd64
ã¯ãruntime / cgo /gcc_amd64.sãã¡ã€ã«ã§å®çŸ©ãããŠããŸãã ãã®ãã¡ã€ã«ã¯GCCã«ãã£ãŠã³ã³ãã€ã«ãããŸãïŒãã¹ãŠã®runtime / cgo / gcc_ *ãã¡ã€ã«ãåæ§ã§ãïŒã ãããã£ãŠããã¹ãŠã®Goã³ãŒããå«ãåäžã®go.oãã¡ã€ã«ã«çµåãããããã§ã¯ãããŸããã åã«èª¬æãããã¡ã€ã«runtime / cgo / asm_amd64.sã¯ãã·ã³ãã«crosscall2
å®çŸ©ããŸãã ãã®ã·ã³ãã«ã¯go.oã«ãããŸãã
ããããšãã
ããŠãã¢ã¯ã»ã¹éåã§ã¯ã©ãã·ã¥ããå®è¡å¯èœãã¡ã€ã«ããªã³ã¯ããããšãã§ããŸãã
go.runtime.rt0_go + 5F-> go .___ acrt_stdio_initializerã
ããã¯ç§ãä»ã®ãšããæã£ãŠãããã¹ãŠã®æéã§ãã åŸã§ããã«æ»ããŸãã
@alexbrainmanãã®éãã§ãã
@alexbrainmanç¶è¡ããã«ã¯MSVCãå¿ èŠã§ãã ããã«ã€ããŠãµããŒããå¿ èŠãã©ããããç¥ãããã ããã
ç¶è¡ããã«ã¯MSVCãå¿ èŠã§ãã
ç§ã¯ãããã€ã³ã¹ããŒã«ããŠããŸãhttps://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017
ã€ã³ã¹ããŒã«ãããã©ãããã°ããã§ããïŒ
ã¢ã¬ãã¯ã¹
ãããã€ã³ã¹ããŒã«ããããgoã©ã€ãã©ãªã§ãããlibgoãããã«ãããå¿ èŠããããŸãã 次ã®ãã¡ã€ã«ãcgoãã©ã«ããŒããã³ããŒã
MSVCãšäºææ§ãããããã«gcc_windows_amd64.cã調æŽããå¿ èŠããããŸãã 次ã®ããã«é¢æ°ãå€æŽããŸãã
static void
threadentry(void *v)
{
fprintf(stderr, "threadentry: started");
abort();
ThreadStart ts;
ts = *(ThreadStart*)v;
free(v);
ts.g->stackhi = (uintptr)&ts;
ts.g->stacklo = (uintptr)&ts - STACKSIZE + 8*1024;
/*
* Set specific keys in thread local storage.
*/
__writegsqword(0x28, (unsigned long long) ts.tls);
*(void **)ts.tls = (void *) ts.g;
crosscall_amd64(ts.fn);
}
ãbuild.batããšåŒã°ããããããã¹ãŠã®ãã¡ã€ã«ãå«ãæ°ãããã¡ã€ã«ããã©ã«ããŒã«äœæããŸãã
REM TMP use gcc for assmebly file, in future port to ml64
gcc -c gcc_amd64.S
cl -c gcc_fatalf.c
cl -c gcc_libinit_windows.c
cl -c gcc_windows_amd64.c
cl -c gcc_util.c
ren gcc_amd64.o gcc_amd64.obj
lib gcc_amd64.obj gcc_fatalf.obj gcc_libinit_windows.obj ^
gcc_windows_amd64.obj gcc_util.obj ^
/OUT:libgo.lib
ãªã¯ãšã¹ãã©ããã«ãã©ã«ããæ§æãããããç¥ãããã ããã
ã¡ãªã¿ã«ãããã«åãçµãã§ãããŠããããšãã ããªããã¡ã¯æ¬åœã«éæ³ã®èšèªãäœæããŸããã
ãªã¯ãšã¹ãã©ããã«ãã©ã«ããæ§æãããããç¥ãããã ããã
ããªããããã§èª¬æããããã«ãç§ã¯ãªããšãlibgo.libãæ§ç¯ããããšãã§ããŸããhttps://github.com/golang/go/issues/20982#issuecomment -327365063
次ã«äœãããã°ããã§ããïŒ
ã¢ã¬ãã¯ã¹
ã§ã¯ã次ã®ãã¡ã€ã«ãå¿ èŠã§ãã
hello.cã¯æ¬¡ã®ãšããã§ãã
#include <stdio.h>
extern void hello()
{
printf("Hello World from C");
}
hello.cgo2.o
ãšgo.o
ãååŸããã«ã¯ã次ã®ãã¡ã€ã«ããå§ããå¿
èŠããããŸãã
package main
/*
extern void hello();
*/
import "C"
import "fmt"
func main() {
fmt.Println("Hello from Go!")
C.hello()
}
ãhello.goããšåŒã°ãã
$ envïŒTMPãããã¡ã€ã«ãç¶ç¶çã«ã³ããŒããPowerShellã¹ã¯ãªãããèšå®ããŸãã
while ($true) { cp -r $env:TMP\go-* C:\Users\User\Downloads }
次ã«ããã©ã«ããŒå
ã®hello.c
ãšhello.go
ããŠgo build
ãå®è¡ããŸãã ã³ããŒå
ã®å Žæããå¿
èŠãªãã¡ã€ã«ãå埩ã§ããã¯ãã§ãã
äžèšã§æå®ãããã¡ã€ã«ãå ¥æãããã次ã®æ¹æ³ã§ãã«ãã§ããŸãã
cl libgo.lib go.o hello.cgo2.o hello.c Ws2_32.lib Winmm.lib -link /DEBUG:FULL
ãäžæãªç¹ãããããŸããããç¥ãããã ããã
cl libgo.lib go.o hello.cgo2.o hello.c Ws2_32.lib Winmm.lib -link / DEBUGïŒFULL
ããã«ãããgo.exeå®è¡å¯èœãã¡ã€ã«ãäœæãããŸãããå®è¡ãããŸããã ããã«ã¯è³¢æãªasmã³ãŒãã¯ãããŸããã æåã®æ瀺ã¯ã©ãã«ãé£ã³ã€ããŸããã ããã¯ãã ã®æ··ä¹±ã§ãã
ãã¶ããããªãã¯æ¬åœã«åçŽãªäœãããå§ããã¹ãã§ãã ãINT $ 3ããå®è¡ããä»ã«äœããªãåäžã®asmé¢æ°ã䜿çšããŠasmãã¡ã€ã«ïŒGo asm fileïŒãèšè¿°ããŸãã ãããŠãããããå®è¡å¯èœããã°ã©ã ãæ§ç¯ããŠã¿ãŠãã ãã-ããã°ã©ã ã¯æåããé¢æ°ãå®è¡ããå¿ èŠããããŸãã
ãã¶ããæåã«GoããŒã«ã䜿çšããŠïŒãããŠå¿ èŠã«å¿ããŠgccã䜿çšããŠïŒãã«ãããŠãããMSVCã䜿çšããŠåãããšãè©ŠããŠã¿ãŠãã ããã
ã¢ã¬ãã¯ã¹
ã¢ã¬ãã¯ã¹ãå©ããŠãããŠããããšãã ç§ã¯ããã«åãçµã¿ãŸãã
ç§ã¯å®éã«ãmsvcã©ã€ãã©ãªã®ã¿ã䜿çšããããªãè€éãªgoããã°ã©ã ãåäœãããŸããã ããã©msvcãªã³ã«ãŒãšllvm-lldã®äž¡æ¹ã.bss
ã»ã¯ã·ã§ã³ãæ£ããåŠçããªãã£ãããšãå€æããŸããã
ãªã³ã«ã«ããããé©çšãããšãããã°ã©ã ãå®è¡ã§ããããã«ãªããŸãã
æ®å¿µãªããã go build
ã¯ã _cgo_.o
/ _all.o
çæãããšå£ããŸãã cgoã§ããã2ã€ã®ãã¡ã€ã«ãçæããèåŸã«ããçè«çæ ¹æ ã«å
ãåœãŠãããšã¯å¯èœã§ããïŒ
go tool cgo
ãå®è¡ããŠãcgoãçŽæ¥å®è¡ã§ããŸãã ãœãŒã¹ã¯ããã«ãããŸãïŒ https ïŒ
ãŸãããããå®è¡ã§ãããšããããããã¯çŽ æŽãããããšã§ãã ç§ã¯ããã«æéãå²ããŠããªãã®ã§ãé²æ©ã¯ãããŸããã§ããã ç³ãèš³ãããŸããã
äžé£ã®æçž«ãã§æ£ããå®è¡ã§ããããã°ã©ã ããã§ã«å ¥æããŠããŸããããã§ããããšããŠããã®ã¯ãããã»ã¹ãçµ±åããŠãçã¿ã軜æžã§ãããã©ããã確èªããããšã§ãã :-)
æçž«ãã®ããã»ã¹ãææžåã§ããã°ãç§ããæäŒãã§ãããããããŸããã
èŠãã ãã§ã _cgo_.o
ã¯æ¬¡ã®ããã«çæãããŠããããã§ãïŒç°¡ç¥åïŒïŒ
gcc [*.c] [*.cxx] -o _cgo_.o
ããããïŒ https ïŒ
ãŸããããã¥ã¡ã³ãã«ã€ããŠã¯ããã¡ããåç
§ããŠãã ããã
https://github.com/golang/go/blob/840f2c167f1d5196559d8a1e77c370960e66d34e/src/cmd/cgo/doc.go#L607
çæ³çã«ã¯ããªããžã§ã¯ããã¡ã€ã«ãååŠçããŠlink.exe
ãšäºææ§ãæãããæ©æŠãæå°éã«æããgoããã°ã©ã ãäœæããŸãããããã¯äžçš®ã®ç®æšã§ãã
ãã€ã³ã¿ãããããšã-ç§ã¯ããã«ããã»ã¹ãæžãçããã€ããã§ãã
æ®å¿µãªããã .bss
ã»ã¯ã·ã§ã³ã§ã¯ãªã.data
ã»ã¯ã·ã§ã³ã§åæåãããŠããªãããŒã¿ãåºåããããã«gccãå€æŽããªãéãã link.exe
ãä»ããŠãªã³ã¯ãå®è¡ã§ãããšã¯æããŸããããå¯èœã§ãã llvm-lld
ã確å®ã«ä¿®æ£ããŠã .bss
ã»ã¯ã·ã§ã³ãèªèããŸãïŒããã¯ç§ãè¡ã£ãããšã§ãïŒã
_cgo_.o
ãš_all.o
å¥ã
ã«åãçµãå¿
èŠããããŸãã ç§ã¯ãããã«ã€ããŠããã€ã質åããããŸãïŒ
ïŒ1ïŒ _cgo_.o
ã¯ãgoã©ã³ã¿ã€ã ãå«ãŸããŠããªããããæçµçãªå®è¡å¯èœãã¡ã€ã«ã§ã¯ãªãããã§ãã ã³ã³ãã€ã©ãæ§é äœã®å®çŸ©ãç解ããããã«DWARFã·ã³ãã«ã調ã¹ãŠããããã«èŠããŸãã åé¡ã¯ãå€éšã®å€æ°ã®ã©ã€ãã©ãªãç¹ã«msvcã«ãã£ãŠçæãããã©ã€ãã©ãªãšãªã³ã¯ããå Žåãå®è¡å¯èœãã¡ã€ã«ãçæããã®ãé£ããããšã§ãã
ãã®ã¹ããããåé¿ããããšã¯å¯èœã§ããïŒ
ïŒ2ïŒçŸåšã¯GNU ld
ã䜿çšããŠãGCCã§-Wl,-r
ãæž¡ãããšã«ããããã¹ãŠã®ãªããžã§ã¯ããã¡ã€ã«ã_all.o
ã«ã¹ãããããŸãã ããã¯ãïŒ1ïŒä»ã®ãªã³ã«ãŒããã®æ©èœãåããŠããªãããã§ãããïŒ2ïŒã³ãã³ããCGO_LDFLAGS
圱é¿ãåããããåé¡ããããŸãã ããšãã°ã次ã®ã³ãã³ãã¯èª€ã£ãçµæãçæããŸãã
CGO_LDFLAGS="-Wl,-T,my-linker-script"
gcc .... $CGO_LDFLAGS -Wl,-r,...
ãã³ãã«ããããªããžã§ã¯ããã¡ã€ã«ã®ä»£ããã«å®è¡å¯èœãã¡ã€ã«ãçæããŸãã
çæããã.a
ã«ãã¹ãŠã®ãªããžã§ã¯ããã¡ã€ã«ãçŽæ¥é
眮ããã ãã§ããã®æé ãå®å
šã«åé¿ããããšã¯å¯èœã§ããïŒ
@zoobaãã®ãããã§MSFTã«link.exe
ãæŽæ°ãããå¯èœæ§ã¯äœã§ããïŒ
æ®å¿µãªããã.bssã»ã¯ã·ã§ã³ã§ã¯ãªã.dataã»ã¯ã·ã§ã³ã§åæåãããŠããªãããŒã¿ãåºåããããã«gccãå€æŽããªãéããlink.exeãä»ããŠãªã³ã¯ãå®è¡ã§ãããšã¯æããŸããããllvm-lldãä¿®æ£ããŠ.bssã»ã¯ã·ã§ã³ãèªèããããšã¯ééããããŸããã ïŒããã¯ç§ããã£ãããšã§ãïŒã
MSFTãæŽæ°ãããªããšä»®å®ããŠlink.exe
ïŒå¯èœæ§ã®ããïŒããæã€ãªããžã§ã¯ããã¡ã€ã«ãã³ã³ãã€ã«ãããšããã§ãããcl.exe
ã§ã¯ãªãgcc
ã
_cgo_.o
ã¯ãgoã©ã³ã¿ã€ã ãå«ãŸããŠããªããããæçµçãªå®è¡å¯èœãã¡ã€ã«ã§ã¯ãªãããã§ãã
ããã§ããåºæ¬çã«2ã»ããã®ãªããžã§ã¯ããã¡ã€ã«ïŒç§ã¯æãïŒãæçµçã«äžç·ã«ãªã³ã¯ãããŸãã go.o
ãã¡ã€ã«ïŒIIRCïŒã«ã¯ããã¹ãŠã®goã³ãŒããšã©ã³ã¿ã€ã ãå«ãŸããä»ã®ãªããžã§ã¯ãã«ã¯Cã³ãŒããå«ãŸããŠããŸãã 2ã»ããã®ãªããžã§ã¯ãéããžã£ã³ãããããã®ã¢ã»ã³ããªã«ãŒãã³ããããŸãã
ãŸããUnixã¢ã»ã³ããªãã¡ã€ã«ãã³ã³ãã€ã«ããã«ã¯clang
ãå¿
èŠã§ãã
ããã§ã¯ã -Wl,-r
ã¯lib.exe [object files] /OUT:obj
ãå®è¡ããã®ãšåãã«ãªããŸãã ãã®ãªãã·ã§ã³ã¯ããã€ã³ã¯ãªã¡ã³ã¿ã«ãªã³ã¯ããæå³ããŸããããã¯ããããã€ãã®å
¥åãã¡ã€ã«ãååŸããããã€ãã®äœæ¥ãè¡ã£ãŠãããå¥ã®ãªããžã§ã¯ããã¡ã€ã«ãåãåºããããšãæå³ããŸãã ä»ã®ãšãããäœæ¥ãè¡ããéšåã«ã€ããŠå¿é
ããªãå Žåã¯ããªããžã§ã¯ããã¡ã€ã«ã次ã®å Žåãé€ããŠããããã€ãã®å
¥åãã¡ã€ã«ããªããžã§ã¯ããã¡ã€ã«ãååŸããå¥ã®ãªããžã§ã¯ããã¡ã€ã«ãåãåºãããšããèŠä»¶ãåãããšãã§ããŸããå³æžé€šã
ãªãã·ã§ã³-fno-zero-initialized-in-bss
ã䜿çšããŠã.bssã»ã¯ã·ã§ã³ã§ã¯ãªã.dataã»ã¯ã·ã§ã³ã«å€æ°ãé
眮ããªãããã«GCCã«æ瀺ã§ããŸãã
ãã³ãã§ã¯ãcgoã³ãŒãããã«ããããšãã«-Wl,-r
䜿çšããªããªã£ãããšã«æ³šæããŠãã ããã
cmd / linkãMSVCãªããžã§ã¯ããã¡ã€ã«ã.syso
ãã¡ã€ã«ãšããŠäœ¿çšããããã«ãããããç解ããå¿
èŠã¯ãããŸããã ãããã®ãã¡ã€ã«ã¯ããšã«ããå€éšãªã³ã«ã«æž¡ãããã ãã§ãã ãããã£ãŠãããã§å¿
èŠãªã®ã¯ãMSVCãªã³ã«ãŒãå€éšãªã³ã«ãŒãšããŠåŒã³åºãããšã ãšæããŸããããã¯ã -extld
ãªãã·ã§ã³ã䜿çšããŠå®è¡ã§ããã¯ãã§ãã ããªãããã§ã«ãããããŠãããªããç§ã®è¬çœªã ãã®å Žåãäœã倱æããŠããŸããïŒ
ããªãããã§ã«ãããããŠãããªããç§ã®è¬çœªã ãã®å Žåãäœã倱æããŠããŸããïŒ
IIRCãgccã§çæããããªããžã§ã¯ãã®link.exe
ããŒãã
確ãã«ã CC
ç°å¢å€æ°ãé©åã«èšå®ããããšã«ãããMSVCCã®ã³ã³ãã€ã©ã䜿çšããå¿
èŠããããŸãã GCCãªããžã§ã¯ããšMSVCãªããžã§ã¯ãã1ã€ã®ãªã³ã¯ã«çµåããããšã¯ããŸããããªããšæããŸãã
ãããããã®åŸãã©ã³ã¿ã€ã Cã©ã€ãã©ãªãããªã³ã³ãã€ã«ããããšããåé¡ãçºçããŸãã ãããŠãããããåã³ã³ãã€ã«ããããšãããšã cl
ãUNIXã¢ã»ã³ããªãã³ã³ãã€ã«ã§ããªããšããåé¡ãçºçããŸãã ãããŠãã©ã³ã¿ã€ã ã©ã€ãã©ãªã®äžéšã移æ€ãããããããªã³ã¯ããããšããŸããããã¯ç§ãè¡ã£ãŠå€±æããããšã§ãã
éäžã®ã©ããã§ã cl
ã¯ã³ãŒãã®éèŠãªéšåã誀ã£ãŠã³ã³ãã€ã«ããŸãã ãããä¿®æ£ããããã®ç§ã®ã¢ã€ãã¢ã¯ãMSVCã³ãŒãããã©ããC APIã䜿çšããŠDLLã«å解ããåäœãåæ¢ãããŸã§ã©ã³ã¿ã€ã ã©ã€ãã©ãªã段éçã«ã³ã³ãã€ã«ããããšã§ãã
åé¡ã解決ããããã®@haohuiã®èãã¯ç°ãªã£ãŠããŸããã 圌ã¯åé¡ã®æ ¹æ¬ãä¿®æ£ããã®ã§ã¯ãªãããªã³ã«ãŒã«ããããåœãŠãããšã§åé¡ãåé¿ããŸããã æããã«åœŒã¯ç§ãããå€ãã®æåãåããŸããããããã¯ãããã圌ã®ã¢ãããŒããç§ãããããŸãããå¯èœæ§ãé«ãããã§ãã
ãã®æç¹ïŒIMHOïŒã§ãå§ãããã®ã¯ãã©ã³ã¿ã€ã ã©ã€ãã©ãªãæ©èœããªããªããŸã§ããŸãã¯gccã³ãŒãããªããªããŸã§ã cl
ã䜿çšããŠã©ã³ã¿ã€ã ã©ã€ãã©ãªã段éçã«ã³ã³ãã€ã«ããããšã§ãã ããããã°ãåé¡ãã©ãã«ããããæ£ç¢ºã«ç¥ãããšãã§ããŸãã
ãŸãããªã³ã«ãŒãããã䜿çšãããšãDLLã¯å¿ èŠãããŸããã
+1 @haohuiãããé²ããŠãããŠããããšãïŒ
@haohuiãããã¯ã©ã®ããŒãžã§ã³ã®llvmã«é©çšãããŸããïŒ ãããã®äœ¿çšæ¹æ³ãšMSVCãã¡ã€ã«ãžã®ãªã³ã¯æ¹æ³ã«é¢ããæ瀺ã¯ãããŸããïŒ
_cgo_.o
ãã¡ã€ã«ãš_all.o
ãã¡ã€ã«ã«é¢ããŠã¯ãåãåé¡ãçºçããããããã®åé¡ã®ä¿®æ£ãä»ã®åé¡ã®ä¿®æ£ã«ãªãå¯èœæ§ããããŸãïŒ https ïŒ
ããã«é¢ãããã¹ãŠã®äœæ¥ã«æè¬ããŸãã é 調ã«é²ãã§ããããã§ãã æ°æ©èœã¯Go1.11ãŸã§åçµãããããããã€ã«ã¹ããŒã³ãå€æŽãããŸãã
ããã§ç§ã¯æšå€ãã®äžã«é£ã³èŸŒãã ã msvcïŒclãä»ããŠãã¹ãŠããã«ããã ãŸãã ããããåé¡ã¯è»å£ã§ãã
ãããã£ãŠã msvcïŒclãC99ãå®å šã«ãµããŒãããŠããªããªã©ã®åçŽãªåé¡ãè¶ ããŠïŒçŸåšãã¿ã€ã_ComplexãåŠçã§ããŸããïŒã gointernalsã«ãã£ãŠãã«ããããPEã©ã€ãã©ãªãšmsvcã«ãã£ãŠãã«ããããPEã©ã€ãã©ãªãçµã¿åããããšãããäœç³»çãªåé¡ãçºçããŸãã å ·äœçã«ã¯ã msvcïŒlinkã¯.bssã»ã°ã¡ã³ããå¹ãé£ã°ããŸãïŒãã®ããŒã¿ã.dataã«ã¹ããŒããå¯èœæ§ããããšæããŸãïŒãããã¯ãgoã¢ã»ã³ãã©ãŒSBïŒpseudo regïŒãã.bssã移åãããå Žåã«èª€ã£ãã¢ãã¬ã¹æå®ãããããããã«èŠãããããåé¡ã§ãã ã
ç§ã®æåã®èãã¯ãã¢ã»ã³ãã©ã«.bssãš.noptrbssã«å ¥ããã®ããããã.dataãš.noptrdataã«é 眮ãããããšã§ããã ãããå¯èœãã©ããããããããŸããã ç§ãããããããã®ã¯æåãããã¢ãã¬ã¹æå®ã¯å®å šã«å€±æããŸãã
ä»ã®ãšããlink.exeã¯äœ¿ããªããšæããŸãã lld-link.exeããå§ããã¹ãã ãšæããŸã
ãã®èåŸã«ããèããã.bssããŒã¿ã移åããªãããã«lld-linkã«ããããé©çšã§ãããšããããšã§ããã°ãç§ã¯ãã®é åãç解ããŠããŸãã çŸå®çã«ã¯ãç®æšãå®éã®msvcããŒã«ãã§ãŒã³ããµããŒãããããšã§ããå Žåã¯ãå éšã³ã³ãã€ã«ã«é²ã¿ãããŒã¿ã.bss /.noptrbssã«é 眮ããå¿ èŠããããŸãã
lld-link.exeãgoã§åé åžããããšã¯ã§ããŸãããïŒ ããã¯ãLTCGãæå¹ã«ãªã£ãŠããªãéããMSVCãªããžã§ã¯ããã¡ã€ã«ããµããŒãããããã®æããªã¹ã¯ã®äœããã¹ã®ããã§ãã çæ³çã§ã¯ãªãããšã¯ç解ããŠããŸããããªãœãŒã¹ã®å¶çŽã«çŽé¢ããŠããŸãã
ããã¯ãŸããæè¯ã®æŠç¥ã§ãã挞é²çãªé²æ©ãå¯èœã«ããŸãã
ããŠãããã€ãã®è¯ããã©ããŒã¢ãããã¥ãŒã¹ãç§ã¯æŒé£æã«ããã«åãçµãã®ã«1æéãè²»ããããšãã§ããŸããã
çŸæç¹ã§ã¯ãåé¡ã®ååã®äŸãæ©èœããŠããŸãã
- hello.go:
package main
/*
extern void hello();
*/
import "C"
func main() {
C.hello()
}
- extern.c
#include <stdio.h>
extern void hello()
{
printf("Hello World from C");
}
>ac.out.exe
Hello World from C
ãã€ããªã¯ãMSVCããã³GoããŒã«ãã§ãŒã³ã§å®å šã«æ§ç¯ãããŠããŸãïŒGCCãŸãã¯ä»ã®LLVMã¯ã€ã³ã¹ããŒã«ãããŠããŸããïŒã
調æ»çµæïŒ
次ã®ã¹ãããïŒ
ä»é±æ«ã«æéãããã°ãå€æŽããã©ãŒã¯ã«å
¥ããäœæ¥ãããŸããããã«ã/ãªã³ã¯ã®ãã©ã°ã®èåŸã«ããæ©èœã§ãã ãã®åŸãPRãè¡ã£ãŠã¬ãã¥ãŒãè¡ããçš®é¡ãæ€èšããŸãã .bssããŒã¿ã移åããŠããã©ããã«äœããã®åœ±é¿ããªãããšã100ïŒ
確信ããŠããããã§ã¯ãããŸããã
ç§ãèããããšãã§ããå¯äžã®æ¬ ç¹ã¯ããã€ããªã®ãµã€ãºã倧ãããªãããšã§ãããåé¡ã¯ãªãã¯ãã§ãã
ããã£ãïŒ
ç³ãèš³ãããŸããããããããŸãšããã®ã«ããã«æ°æ¥ããããŸããã ãããã£ãŠããããã®æåã®ãã©ããã¯ããã«ãããŸãïŒ https ïŒ https://github.com/cchamplin/go/tree/msvc_toolchain_support
ããã¯ãŸã 倧éæã§ãããmsvcã䜿çšããŠã³ãŒããæ£åžžã«ãã«ãã§ããŸãã
人ã ãä»ããããã¹ããå§ããŠãã°ãç§ã«å ±åããŠãç§ããããäžæµã®ããè¯ãå Žæã«çœ®ãããšãã§ããã°çŽ æŽããããšæããŸãã ãŸãã誰ãããã¹ããæžãããšããããããããªããããã¯çŽ æŽãããã§ãããïŒ
䜿çšæ³ïŒ
go build -compiler msvc [path]
ãªã³ã¯ããããããã¯ãããŒãã¹ãã©ããã®åé¡ãåŒãèµ·ãããŸãã
@alexbrainman toolchain1
ããŒã¹ãã©ããã³ã°ãã§ãŒãºäžã«ã©ã®ãã¡ã€ã«ãpkg/boostrap/src/bootstrap
ã«ã³ããŒããããã¯ãã©ãã§ã©ã®ããã«æ±ºå®ãããŸããïŒ
cc @alexbrainman
ãªã³ã¯ããããããã¯ãããŒãã¹ãã©ããã®åé¡ãåŒãèµ·ãããŸãã
ä»æ¥ãããŒãã¹ãã©ãããã©ã®ããã«æ©èœããã®ãããããŸããã ããããä»ã®äººïŒ @rscãš@ianlancetaylorïŒãå©ããŠããããšç¢ºä¿¡ããŠããŸãã
ããŒãã¹ãã©ãããæ©èœããªãå Žåã @ cchamplinãmake.batãã©ã®ããã«å®è¡ããã®ã ãããã
ã¢ã¬ãã¯ã¹
@xoviatäœãåé¡ãªã®ãããããŸããããããŒãã¹ãã©ãããã£ã¬ã¯ããªã®ãªã¹ãã¯cmd / dist /buildtool.goã«ãããŸãã
ãã@ alexbrainman ã @ ianlancetaylor ã @ xoviatç³ãèš³ãããŸãããããã£ãšåŸ¹åºçã«æ€èšŒããå¿ èŠããã£ããšæããŸãã
ããhttps://github.com/cchamplin/go/commit/69a5cfc1dd0106fd8a2928a83e4c7001e81e89b8ã§ãã©ã³ããæŽæ°ããããŒãã¹ãã©ããã®åé¡ãä¿®æ£ããŸãããä»ã¯æ£ããããŒãã¹ãã©ããããå¿ èŠããããšæããŸãã
ããã€ãã®/ src / internal / syscallãã£ã¬ã¯ããªãcmd / internal / msvcã«ã³ããŒããå¿ èŠããããŸããã ããã¯å€§ããªåé¡ã«ãªãã®ã§ããããïŒ src / internalã䜿çšããã«ã¬ãžã¹ããªã«ã¢ã¯ã»ã¹ããæ¹æ³ãããããŸããã
ããã€ãã®/ src / internal / syscallãã£ã¬ã¯ããªãcmd / internal / msvcã«ã³ããŒããå¿ èŠããããŸããã ããã¯å€§ããªåé¡ã«ãªãã®ã§ããããïŒ src / internalã䜿çšããã«ã¬ãžã¹ããªã«ã¢ã¯ã»ã¹ããæ¹æ³ãããããŸããã
æè¿ã®ããæ¹ã¯ããããŸãããããœãŒã¹ãã¡ã€ã«ãæåã§ã³ããŒããªããŠãcmd / distã§ã§ããã®ã§ã¯ãªãããšæããŸãã ã³ãŒããéä¿¡ããæºåãã§ããããRussãŸãã¯IanããæäŒããããšç¢ºä¿¡ããŠããŸãã
@bradfitzãš@ianlancetaylorãããã§ã©ã®ããã«é²ãããã決ããæãæ¥ããšæããŸãã Goã«gccã ãã§ãªãMicrosoftãã«ãããŒã«ããµããŒãããããã§ããïŒ å¯Ÿå¿ããMicrosoftããŒã«ããã«ããŒã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãïŒCLã®åãå ¥ããéå§ããåã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãïŒã ãããããæ°ããç°å¢å€æ°ãå°å ¥ããå¿ èŠããããŸãã æ°ããããã¥ã¡ã³ãã
çãããã¯ããã®å Žåã @ cchamplinã¯https://golang.org/doc/contribute.htmlã«åŸã£ãŠãã³ãŒãã®å€æŽãéä¿¡ããå¿ èŠããããŸãã å€æŽã¯éåžžã«å€§ãããããåå¥ã«ç¢ºèªããŠéä¿¡ã§ããããã«ãå°ããªCLã«åå²ããå¿ èŠããããŸãã å€æŽãéä¿¡ããã«ã¯ãå€æŽããšã«all.batPASSãå¿ èŠã§ãã æåã®CLã®éä¿¡ãéå§ããåã«ããã¹ãŠã®CLã確èªã§ããã°äŸ¿å©ã§ãã
ããããšãããããŸããã
ã¢ã¬ãã¯ã¹
Goã«gccã ãã§ãªãMicrosoftãã«ãããŒã«ããµããŒãããããã§ããïŒ
ãã®ãããã¯ãç§ããã§ã«ããããåŠçããŠããïŒ17014ã容æã«ããããšã«æ³šæããŠãã ããã
çãããã¯ããã®å Žåã @ cchamplinã¯https://golang.org/doc/contribute.htmlã«åŸã£ãŠãã³ãŒãã®å€æŽãéä¿¡ããå¿ èŠããããŸãã å€æŽã¯éåžžã«å€§ãããããåå¥ã«ç¢ºèªããŠéä¿¡ã§ããããã«ãå°ããªCLã«åå²ããå¿ èŠããããŸãã
ã¯ãããããŠãããåå²ããããšã¯å€§ããããšã§ã¯ãªãã¯ãã§ãã ãã¹ãŠã®ã³ãŒããã¯ãªãŒã³ã¢ããããããããã¥ã¡ã³ããäœæãããããã¹ããäœæãããããåã«ããããåé¡ã«ãªãå¯èœæ§ããããã©ãããç¥ãå¿ èŠããããŸãã
Goã«gccã ãã§ãªãMicrosoftãã«ãããŒã«ããµããŒãããããã§ããïŒ
ç§ã®èãã§ã¯ãçãã¯ã€ãšã¹ã§ãã ã³ã³ãã€ã©èªäœã¯VSCommunityã§ç¡æã§ãããå®å
šãªWindowsãµããŒãããªãããšã¯æ¬åœã«ã€ã©ã€ã©ããŸãã WindowsããŒã«ãã§ãŒã³ã¯ãµããŒããããŠããªãããã github.com/Microsoft/hcsshim
ãã³ã³ãã€ã«ããããã«Linuxããã¯ã¹ãç«ãŠãå¿
èŠã¯ãããŸããïŒããšãã°ïŒã
WindowsããŒã«ãã§ãŒã³ããµããŒãããªãçç±ã¯äœã§ããããïŒ
ååãšããŠãMSVCãªããžã§ã¯ããã¡ã€ã«ããµããŒãããããšã¯åé¡ãªããšæããŸãã ãã«ããŒãå¿ èŠã«ãªããŸãã
ç§ã®äž»ãªé¢å¿äºã¯ãWindowsãŸãã¯MSVCã®ãªãªãŒã¹éã§ãã©ãŒããããã©ã®çšåºŠå€ããå¯èœæ§ããããã§ãã ä»ã®ã»ãšãã©ã®ãã©ãããã©ãŒã ã§äœ¿çšãããŠããELF圢åŒã¯éåžžã«å®å®ããŠããŸãã æ°ããããã»ããµã®ãµããŒããè¿œå ãã以å€ã®æ¹æ³ã§ELFãµããŒãã埮調æŽããå¿ èŠãããããšã¯ãã£ãã«ãããŸããã MSVCãã¡ã€ã«åœ¢åŒãåæ§ã«å®å®ããŠããŸããïŒ
MSVCããŒã«ãã§ãŒã³ã«é¢é£ä»ããããŠãã圢åŒã¯ããªãå®å®ããŠããŸãã æ倧ã®åé¡ã¯ãããŒã«èªäœããµããŒãããããšã§ãã Microsoftã¯ãVisual Studioã®ãªãªãŒã¹éã§ç©äºïŒãã¡ã€ã«ãšã¬ãžã¹ããªãšã³ããªïŒã移åããåŸåããããŸãã ããã®ã»ãšãã©ã¯ïŒå°ãªããšãç§ãæžãããããã§ã¯ïŒæ§æå¯èœã§ãããVisual Studioã®æ°ããã¡ãžã£ãŒããŒãžã§ã³ããªãªãŒã¹ããããšãã«ãGoãå€æŽããªããšãã«ãããŒã«ãã§ãŒã³ãšããŠäºææ§ããªãå¯èœæ§ããããŸãã ãã ãããµããŒããããŠãã以åã®ããŒãžã§ã³ã®VisualStudioã¯ãã¹ãŠåŒãç¶ãæ©èœããŸãã
ç§ã®ç¥ãéããC ABIïŒC ++ã§ã¯ãªãïŒã ãã«ãããããå ŽåãCOFF圢åŒã¯åŠ¥åœãªå®å®æ§ãåããŠããŸãã ãŸããåºç¯å²ã«ããã£ãŠææžåãããŠãããLLVMã¯ãªãã¡ã¬ã³ã¹å®è£ ãæäŸããŸãã
@cchamplin MSVCãšãªã³ã¯ããåã«ããŠãŒã¶ãŒã«vcvarsall.batãåŒã³åºãããã«èŠæ±ããããšããå§ãããŸãã ããã«ãããã¡ã³ããã³ã¹ãã»ãŒãŒãã«å€§å¹ ã«åæžãããŸãã
ãã«ããŒãå¿ èŠã«ãªããŸãã
@ianlancetaylor MSVCãªããžã§ã¯ããæå³ãããšããã«æ©èœããããšã蚌æãããããmsys / cygwinãã«ããŒãšMSVCãã«ããŒã®äž¡æ¹ãå¿ èŠã«ãªããšæããŸããããããšãMSVCãã«ããŒã®ã¿ãå¿ èŠã«ãªããšæããŸããïŒ
cygwinããŒã«ã®äœ¿çšã奜ã人ããããšæããŸããããããã¯ãã§ã«æ©èœããŠãããåŒãç¶ãæ©èœããããã®ã§ã2ã€ã®ãã«ããŒãå¿ èŠã ãšæããŸãã
ãã®ã¹ã¬ããã®äžéšãããMSVCã®åé¡ãæŽçãããŠããããã«èŠããŸãã ãã ããåé¡ãçºçããå Žåã¯ãMSVCããŒã ã«æå±ããŠããŸãã githubãŸãã¯é»åã¡ãŒã«ïŒ[email protected]ïŒã§ç§ã«pingããŠãã ããã
ãã«ããŒãå¿ èŠã«ãªããŸãã
ã¯ãã ãããŠãMSãã«ãããŒã«ãã€ã³ã¹ããŒã«ããããã«æ¢åã®ãã«ããŒãå€æŽããããšããå§ããå¿ èŠããããŸãã ãããã£ãŠããã®åé¡ã®CLãåãå ¥ãããšãã«ããããã䜿çšã§ããŸãã
gccããŒã«ãšmicrosoftããŒã«ã®äž¡æ¹ããã¹ãŠã®ãã«ããŒã«ã€ã³ã¹ããŒã«ã§ããŸãã gccããŒã«ãšMicrosoftããŒã«ã®äž¡æ¹ãäžåºŠã«ãã¹ãããall.batãå®è¡ã§ããŸããïŒ ããã§ãªãå Žåã¯ãããŸããŸãªããŒã«çšã«ããŸããŸãªãã«ããŒãæ§æããå¿ èŠããããŸãã 䜿çšããå€éšã³ã³ãã€ã©ãšãªã³ã«ãå¶åŸ¡ãããã©ã¡ãŒã¿ã¯äœã§ããïŒ
ç§ã®äž»ãªé¢å¿äºã¯ãWindowsãŸãã¯MSVCã®ãªãªãŒã¹éã§ãã©ãŒããããã©ã®çšåºŠå€ããå¯èœæ§ããããã§ãã
Windowsã«ã³ã³ãã€ã©ãã€ã³ã¹ããŒã«ãããŠããŸããã èªåã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã gccãšåãããã«ã 奜ããªããŒãžã§ã³ãã€ã³ã¹ããŒã«ããŸãã ç°ãªããã«ããŒã§ç°ãªãgccããŒãžã§ã³ãå®è¡ããããšãã§ããŸãã
MSVCãã¡ã€ã«åœ¢åŒãåæ§ã«å®å®ããŠããŸããïŒ
ç§ã¯ããã«ã€ããŠäœãç¥ããŸããã æäŸãããŠããããŒã«ã䜿çšããŠããã ãã ãšæããŸãã
ã¢ã¬ãã¯ã¹
ç§ã®äž»ãªé¢å¿äºã¯ãWindowsãŸãã¯MSVCã®ãªãªãŒã¹éã§ãã©ãŒããããã©ã®çšåºŠå€ããå¯èœæ§ããããã§ãã ä»ã®ã»ãšãã©ã®ãã©ãããã©ãŒã ã§äœ¿çšãããŠããELF圢åŒã¯éåžžã«å®å®ããŠããŸãã æ°ããããã»ããµã®ãµããŒããè¿œå ãã以å€ã®æ¹æ³ã§ELFãµããŒãã埮調æŽããå¿ èŠãããããšã¯ãã£ãã«ãããŸããã MSVCãã¡ã€ã«åœ¢åŒãåæ§ã«å®å®ããŠããŸããïŒ
ã¯ããCOFFã¯éåžžã«å®å®ããŠããŸãã
@bradfitzãš@ianlancetaylorãã®åé¡ã®å€æŽããã¹ãããããã«Windowsãã«ããŒãå©çšã§ããããã«ããããã«äœãå¿ èŠã§ããïŒ https://github.com/golang/go/issues/20982#issuecomment-370719472ã§ç§ã®è³ªåãåç §ããŠ
ããããšãããããŸãã
ã¢ã¬ãã¯ã¹
ä»ããmsvcãªããžã§ã¯ãããµããŒãããŸããïŒ
å€æŽhttps://golang.org/cl/110555ã¯ãã®åé¡ã«èšåããŠããŸãïŒ debug/pe: parse the import directory correctly
@alexbrainman @bradfitz @ianlancetaylor ïŒ
ããããã¯ãªãŒã³ã¢ããããŠããæ¶åããããéšåã«åå²ããããã«å¿ èŠãªäœæ¥ã®ã»ãšãã©ãå®è¡ããŸããã ãããžã§ã¯ããžã®å®éã®æåºã®æºåãã»ãŒæŽã£ãŠãããšæããŸãã ã³ãŒããéä¿¡ããåã«ãã«ããŒã®ç¶æ³ã«ã€ããŠã®æ å ±ãåŸ ã€å¿ èŠãããã®ãââããããšãã§ããã ãæ©ãå®è¡ããã®ããç¥ãå¿ èŠããããšæããŸããïŒ
CLã¯ãã€ã§ãéä¿¡ã§ããŸããã誰ãããã«ããŒãã»ããã¢ããããå¿ èŠããããŸãã ããã§ãªããã°ããããããã¹ãããæ¹æ³ããããŸããã
@ johnsonj ãMSVCã³ã³ãã€ã©ããŒã«ãWindowsã€ã¡ãŒãžã«è¿œå ã§ããŸããïŒ
çæ³çã«ã¯ãæ°ãããã¹ãã¿ã€ããè¿œå ãããæ¢åã®Windowsãã¹ãã¿ã€ãã®1ã3ã«Cygwinã«å ããŠMSVCããŒã«ãæãããããšæããŸãã ãããŠããããã®å€æŽããããã¹ãã¿ã€ãã®äžã«ããã«ãã«ããŒæ§æãè¿œå ã§ããŸãã
/ cc @andybons @bcmills as FYIïŒWindowsã®åŠçãã©ã®ããã«è¡ããããã«ã€ããŠ...ç§ãã¡ã¯Jeffã«å©ããæ±ããŸã:)ïŒ
@ johnsonj ãMSVCã³ã³ãã€ã©ããŒã«ãWindowsã€ã¡ãŒãžã«è¿œå ã§ããŸããïŒ
@cchamplinãã«ããŒã«å¿ èŠãªããŒã«ãèªåã§è¿œå ããŠã¿ãããšããå§ãããŸãã ä»ã«èª°ãããŸããããããªãã¯äœãå¿ èŠããç¥ã£ãŠããŸãã 詳现ãªæé ã«ã€ããŠã¯ãgolang.org / x / build / env / windowsãã£ã¬ã¯ããªãåç §ããŠãã ããã ç¹ã«ãstartup.ps1ã«ããã«è¡ãè¿œå ããããšæããããããŸããã ãã®ãã£ã¬ã¯ã¿ãŒã§äœãå€æŽããå¿ èŠãããããããã£ãããå€æŽãå ãã httpsïŒ//golang.org/doc/contribute.htmlãä»ããŠã¬ãã¥ãŒã®ããã«å€æŽãéä¿¡ããŸã
çæ³çã«ã¯ãæ°ãããã¹ãã¿ã€ããè¿œå ãããæ¢åã®Windowsãã¹ãã¿ã€ãã®1ã3ã«Cygwinã«å ããŠMSVCããŒã«ãæãããããšæããŸãã ãããŠããããã®å€æŽããããã¹ãã¿ã€ãã®äžã«ããã«ãã«ããŒæ§æãè¿œå ã§ããŸãã
Windowsã«ã¯åžžã«MingwïŒgccïŒCã³ã³ãã€ã©ãšãªã³ã«ãŒããããŸããã ç°ãªãCãã«ãããŒã«ã®ã»ããã¯ãããŸããã Microsoft Cã³ã³ãã€ã©ã®ãµããŒããè¿œå ããããall.batã1åå®è¡ããã ãã§Mingwé¢æ°ãšMicrosoft Cé¢æ°ã®äž¡æ¹ããã¹ãããããšã¯å¯èœã§ããããïŒ ãŸãã¯ãMingwãŸãã¯Microsoft Cã¯ãäºããé€å€ããŸããïŒ MingwãŸãã¯Microsoftãæãããã«ç°å¢å€æ°ãèšå®ããå¿ èŠããããŸãããäž¡æ¹ãæãããšã¯ãããŸãããïŒ ã³ãŒããã©ã®ããã«æ§é åããŠãã¹ãããå¿ èŠãããããç解ããããšããŠãããšæããŸãã ãŸããããã«ãããå¿ èŠãªãã«ããŒã®æ°ã決ãŸããŸãã
ã¢ã¬ãã¯ã¹
ç»åå ã®ãã€ããªããã€ã¯åŠçããæ¹æ³ã調ã¹ãŸã
å€æŽhttps://golang.org/cl/112036ã¯ãã®åé¡ã«èšåããŠããŸãïŒ env/windows: add visual studio tools to image
@johnsonj @bradfitz ïŒããããã«ããŒã«å ¥ããŠãããŠããããšãã
@alexbrainman @bradfitz @ianlancetaylor ïŒãã®ããã®æŠç¥ããã¹ãããéããç§ã¯äœããã¹ããæ£ç¢ºã«ã¯
ãã®ããã®ãã¹ãæŠç¥ã«é¢ããéããç§ã¯äœããã¹ããæ£ç¢ºã«ã¯ããããŸããã ãŠã£ã³ããŠã§äž¡æ¹ã®ããŒã«ãã§ãŒã³ã«å¯ŸããŠdisttestãå®è¡ãããã¹ãåãããã¹ãŠã®ãã¹ãã2åå®è¡ã§ããŸããããããšãcgoãã¹ãã2åïŒgccã«å¯ŸããŠ1åãmsvcã«å¯ŸããŠ1åïŒã ããã¹ãããå¿ èŠããããŸããïŒ
@cchamplinããªãã®è³ªåã«å¯Ÿããçãã¯ãããŸããã ã€ã¢ã³ã¯çããç¥ã£ãŠãããšæããŸãã
ã¢ã¬ãã¯ã¹
cgoã ãã§ãªãããã¹ãŠã®ãã¹ãã2åå®è¡ããã³ã¹ãã¯ãããã§ããïŒ
@ mxplusb ãWindowsã®æ°ãããã«ãæ§æãå®è¡ããã ãã§ãæ¢åã®3ãšäžŠè¡ããŠå®è¡ãããŸããæ°ãããã«ããŒæ§æã§åé¡ãããŸããã å®æçã«è¿œå ããŠããŸãã
ãããå€ããæ¹æ³ãæããŠãã ããïŒç°ãªã/æ°ããç°å¢å€æ°ãèšå®ãããšãäœãããããæŸããšæããŸããïŒ
ãããæ©èœãããã«ã¯ãããããããã€ãã®ããšãå¿ èŠã§ãã
é©åãªvsvars.batãå®è¡/åŒã³åºãããåŸãdistãã¹ããå®è¡ããgoãã¹ããå éšã§å®è¡ãããã·ã§ã«/ç°å¢ã®å éšã§å®è¡ããå¿ èŠããããŸãã
ãŸãã¯ãé©åãªvsvarãdistã§å®è¡ããå¿ èŠãªç°å¢å€æ°ãæœåºããŠãããããããèšå®/åãæž¡ãããŠãã¹ããè¡ãããšãã§ããŸãã
ãŸãã-compiler msvc setã䜿çšããŠãã¹ããå®è¡ããããšãdistãŸãã¯make.batã«éç¥ããããã«ãç°å¢å€æ°ãå¿ èŠã«ãªãå ŽåããããŸãã
é©åãªvsvars.batãå®è¡/åŒã³åºãããåŸãdistãã¹ããå®è¡ããgoãã¹ããå éšã§å®è¡ãããã·ã§ã«/ç°å¢ã®å éšã§å®è¡ããå¿ èŠããããŸãã
ãŸãã¯ãé©åãªvsvarãdistã§å®è¡ããå¿ èŠãªç°å¢å€æ°ãæœåºããŠãããããããèšå®/åãæž¡ãããŠãã¹ããè¡ãããšãã§ããŸãã
dist.exeãŸãã¯go.exeããããããã¡ã€ã«ãå®è¡ããªãæ¹ããããšæããŸãã ããããã¡ã€ã«ãæ±ãã®ã¯é¢åã§ãã
ãŸãã-compiler msvc setã䜿çšããŠãã¹ããå®è¡ããããšãdistãŸãã¯make.batã«éç¥ããããã«ãç°å¢å€æ°ãå¿ èŠã«ãªãå ŽåããããŸãã
ç§ã¯ã€ã¢ã³ãããã§ã®æåã®ã¢ãããŒããäœã§ããããç¥ã£ãŠãããããšãæãã§ããŸããã ç§ãç¥ã£ãŠããããšãããUnixã§ãããŸããŸãªCã³ã³ãã€ã©ïŒgccãŸãã¯clangïŒããµããŒãããŠããŸãã 確ãã«ããã«ãããã»ã¹ã§ã¯ãããŸããŸãªCã³ã³ãã€ã©ããã¹ãã§ããŸãã
ã¢ã¬ãã¯ã¹
go build -compiler msvc
䜿çšãèšç»ããŠããããšã«æ°ã¥ããŸããgo build -compiler
ãªãã·ã§ã³ã¯ãGoã³ã³ãã€ã©ïŒçŸåšã¯gcãŸãã¯gccgoïŒã®ååãåããŸãã Cã³ã³ãã€ã©ã®ååã¯åããŸããã Cã³ã³ãã€ã©ã¯CC
ç°å¢å€æ°ã§æž¡ãããŸãã ããã©ã«ãã®Cã³ã³ãã€ã©ã¯ãmake.batã®ã³ã¡ã³ãã«èšèŒãããŠããããã«ãmake.batã®å®è¡æã«CC_FOR_TARGET
ç°å¢å€æ°ãèšå®ããããšã«ãã£ãŠèšå®ãããŸãã
all.batãå®è¡ããåã«ã CC_FOR_TARGET
ç°å¢å€æ°ãmsvcã«èšå®ããããã«èª¿æŽãããã«ããŒããããšæããŸãã ãªãä»ã®ããšãããªããã°ãªããªãã®ãããããŸããã
Cã³ã³ãã€ã©ã¯CCç°å¢å€æ°ã§æž¡ãããŸãã ããã©ã«ãã®Cã³ã³ãã€ã©ã¯ãmake.batã®ã³ã¡ã³ãã«èšèŒãããŠããããã«ãmake.batã®å®è¡æã«CC_FOR_TARGETç°å¢å€æ°ãèšå®ããããšã«ãã£ãŠèšå®ãããŸãã
説æããŠãããŠããããšãã€ã¢ã³ã
@cchamplinæ¢åã®ã¢ãã«ã«åãããã«å€æŽã調æŽã§ããããšãé¡ã£ãŠããŸãã ãäžæãªç¹ãããããŸãããããæ°è»œã«ãåãåãããã ããã ããããšãããããŸããã
all.batãå®è¡ããåã«ãCC_FOR_TARGETç°å¢å€æ°ãmsvcã«èšå®ããããã«èª¿æŽãããã«ããŒããããšæããŸãã
https://build.golang.orgã«3ã€ã®amd64Windowsãã«ããŒããã
ã¢ã¬ãã¯ã¹
@ianlancetaylor @ alexbrainman - compilerãã©ã°ã«ã€ããŠç解ããŸããã CC="msvc"
ïŒãŸãã¯å®éã«ã¯CC="cl.exe"
ïŒãèšå®ããã ãã§æ©èœãããç°¡åãªæ¹æ³ã¯ãªããšæããŸãã CCã¯ãMSVCãã«ããæ©èœããããã«GCCã®å Žæãæãå¿
èŠããããŸãã msvcã³ã³ãã€ã©ããŒã«ã»ããã«ã¯ãCGOãå¿
èŠãªã€ã³ããã¹ãã¯ã·ã§ã³ïŒå®çŸ©ã«ãã¯ã¢ãããå解決ïŒãå®è¡ã§ããããã«ããããã®ããŒã«ããªããããMSVCãã«ãã§ã¯GCCãåŒãç¶ãå¿
èŠã§ãããGCCã¯å®éã®ã³ã³ãã€ã«/ãªã³ã¯ãã§ãŒãºã§ã¯äœ¿çšãããŸããã
ãã«ãããããã«æ°ãããã©ã°ãè¿œå ããããšã¯ãã¹ãŠåãå ¥ããããŸããïŒããŒã«ãã§ãŒã³ãªã©ïŒïŒ ç§ã¯ãã§ã«ããŒã«ãã§ãŒã³ãã©ã°ãcgoã«è¿œå ããå¿ èŠããã£ããšæããŸãã
ãŸããall.batã®åã«CC_FOR_TARGET
èšå®ãããšãããŒãã¹ãã©ããã§äœ¿çšãããã³ã³ãã€ã©ã«åœ±é¿ãäžãããããæªåœ±é¿ãçããå¯èœæ§ããããŸãã ããŒãã¹ãã©ããããã»ã¹äžã«MSVCã䜿çšã§ãããšã¯æããŸããïŒ100ïŒ
ã§ã¯ãããŸãããå®éã«è©Šããããšã¯ãããŸããããæ©èœãããã©ããã¯éåžžã«çãããã§ãïŒã
ãªãã»ã©ãMSVCã®å ŽåãGCCãšMSVCã®äž¡æ¹ãå¿ èŠã§ããïŒ GCCã¯cgoããŒã«ã§ã®ã¿äœ¿çšãããŸããïŒ ããã¯ãGCCãšMSVCããŸã£ããåãABIãå®è£ ããããšã«å®å šã«äŸåããããšãæå³ãããããããäžå¹žã«æããŸãããããã¯ããªãå¯èœæ§ãé«ããšæããŸãã
GCCã«èšå®ã§ããå¥ã®ç°å¢å€æ°CC_FOR_CGO
è¿œå ã§ãããšæããŸãã
make.batã§äœ¿çšãããCC_FOR_TARGET
ã¯ãruntime / cgoã®ãã«ãã«äœ¿çšãããŸãã 䜿çšããŠããCã³ã³ãã€ã©ã§runtime / cgoããã«ããããŠããªãå Žåãcgoãã©ã®ããã«æ©èœãããã¯ç§ã«ã¯ããããŸããã
ãããããmake.batãåŒã³åºããããšãã«CC_FOR_TARGET
ãcl
ã CGO_ENABLED
ã0
èšå®ããŠåäœãããããšããå§ããå¿
èŠããããŸãã
ããããšã@ianlancetaylor ïŒ
ãªãã»ã©ãMSVCã®å ŽåãGCCãšMSVCã®äž¡æ¹ãå¿ èŠã§ããïŒ GCCã¯cgoããŒã«ã§ã®ã¿äœ¿çšãããŸããïŒ ããã¯ãGCCãšMSVCããŸã£ããåãABIãå®è£ ããããšã«å®å šã«äŸåããããšãæå³ãããããããäžå¹žã«æããŸãããããã¯ããªãå¯èœæ§ãé«ããšæããŸãã
ç§ã¯ãããäžå¹žã§ããããšã«åæããŸãããããŠããã€ãã®ä»£æ¿æ¡ãç¥ã£ãŠããããã§ããç§ã¯ãŸã ãããèŠã€ããŠããŸããã ãã®æ¹æ³ã§ãã«ããããªã¹ã¯ã¯ç¢ºãã«ãããŸãïŒããšãã°ããã«ããããcgoã³ãŒãã¯ããã«ãå ãšèŠãªãããã³ã³ãã€ã©ã«å¿ããŠãç°ãªãåã®å®çŸ©ãŸãã¯å®çŸ©ãæã¡ãŸãïŒã ãã®ãããããã€ãã®èª¿æŽãè¡ããªããšããã«ããåžžã«æåãããæ£ããæ©èœãããããããã§ã¯ãããŸããïŒç§ã®å®è£ ã§ã¯ãããåŠçããã¡ã«ããºã ããããŸãããå°ãæåã®ããã»ã¹ã§ãïŒã æ®å¿µãªãããããã¯MSVCããŒã«ãã§ãŒã³ã䜿çšãããå Žåã«äººã ããšããªããã°ãªããªããªã¹ã¯ã§ãããç§ãã¡ã«ã§ããããšã¯ä»ã®ãšãããããææžåããããšã ãã ãšæããŸãã
åæ§ã«ãMSVCã³ã³ãã€ã©ãc99ã«æºæ ããŠããªããšããçç±ã ãã§ãMSVCã§æ§ç¯ãããcgoããã°ã©ã ã§complex64ããã³complex128ã®ãµããŒããæäŸããããã®å®éã®éã¯ãŸã ãããŸããã
GCCã«èšå®ã§ããå¥ã®ç°å¢å€æ°
CC_FOR_CGO
è¿œå ã§ãããšæããŸãã
ãããã£ãŠãçŸåšã®å®è£ ã§ã¯ãgo buildãMSVCã§ãã«ãããããã«æ瀺ãããŠããå Žåãããã©ã«ãã§ãã¹äžã®cl.exeãæ€çŽ¢ãããŸãããããã¯ç°å¢å€æ°MSCCã§ãªãŒããŒã©ã€ãã§ããŸãã CGOã¯ãçæãããzdefaultcc.goã«ããgcc /äœã§ãã«ãã©ãŒã«ããã¯ããCCç°å¢å€æ°ãåŒãç¶ã䜿çšããŸãã
make.batã§äœ¿çšããã
CC_FOR_TARGET
ã¯ãruntime / cgoã®ãã«ãã«äœ¿çšãããŸãã 䜿çšããŠããCã³ã³ãã€ã©ã§runtime / cgoããã«ããããŠããªãå Žåãcgoãã©ã®ããã«æ©èœãããã¯ç§ã«ã¯ããããŸããã
çŸåšã®å®è£ ã§ã¯ãgoããŒã«ãã§ãŒã³å šäœãgccã«ãã£ãŠæ§ç¯ãããŠããå Žåã§ããcgoã¯msvcãã€ããªã«å¯ŸããŠåé¡ãªãæ©èœããŸãã ããšãã°ãMSVCã³ãŒããgo / srcã«è¿œå ãããŸãã all.batã¯ãgccã䜿çšããŠgoç°å¢ãæ§ç¯ããããã«å®è¡ãããŸãã ãã®åŸãgo / bin / go.exeã䜿çšããŠmsvcããŒã«ãã§ãŒã³ã§ãã«ãã§ããŸãïŒãã©ã°ãæäŸãããŠãããšæ³å®ïŒã ç§ã¯ããªããããã§èšã£ãŠããããšã誀解ããŠãããããããŸããã
msvcã䜿çšããŠãã«ãããããã«æ瀺ããããšã¯ãã³ã³ãã€ã©ãclã«åãæ¿ãããããè€éã§ãããããããã«é¢ããè€éãã MSVCããŒã«ãã§ãŒã³ã¯gccããŒã«ãã§ãŒã³ãšã¯å€§ããç°ãªããŸãã MSVCã§ã¯ãvcvars.batå
ã§å®è¡ããããšã§ç°å¢ãã»ããã¢ããããå¿
èŠããããŸãïŒãŸãã¯ãvcvars.batãå®è¡ããã»ããã¢ããããç°å¢å€æ°ããå¿
èŠãªãã¹ãŠã®æ
å ±ãæœåºããŠãã«ãã§äœ¿çšãããªã©ãv8ãè¡ãããšãå®è¡ããŸãïŒãåŠçããïŒã MSVCç°å¢ã«å
¥ã£ãåŸã®äž»ãªéãã¯ãããŒã«èªäœãcl.exeã䜿çšããŠCããã³C ++ãã¡ã€ã«ãã³ã³ãã€ã«ããml.exeããã³ml64.exeã䜿çšããŠãã¡ã€ã«ãã¢ã»ã³ãã«ããæåŸã«link.exeïŒmsïŒã䜿çšããŠãã¹ãŠããªã³ã¯ããŸãã ã€ãŸãã CC=cl.exe
ãèšå®ããŠãé©åãªãã©ã°ãæž¡ãã ãã§ã¯ãããŸããã ããã¯çã«ããªã£ãŠããŸãã/ç©äºãæ確ã«ããã®ã«åœ¹ç«ã¡ãŸããïŒ
ããã«æ確ã«ããããã«
make.batã§äœ¿çšãããCC_FOR_TARGETã¯ãruntime / cgoã®ãã«ãã«äœ¿çšãããŸãã 䜿çšããŠããCã³ã³ãã€ã©ã§runtime / cgoããã«ããããŠããªãå Žåãcgoãã©ã®ããã«æ©èœãããã¯ç§ã«ã¯ããããŸããã
go build
ã¯ããã«ãããã»ã¹äžã«runtime / cgoããé©åãªãã¡ã€ã«ãéžæããŠããŸãïŒäŸïŒ go build
/ go test
/ go run
-ãã«ããŒããã»ã¹ã§ã¯ãããŸããïŒã msvcããŒã«ãã§ãŒã³ãéžæãããŸããã
ãããã©ã®ããã«æ©èœãããã«ã€ããŠã®ææ¡ãåãå ¥ããŠããŸãããgoããŒã«ã®æ°ããã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã¯å¿ èŠãããŸããã goããŒã«ã«é¢ããéãGCCã®ããã«åäœãããå®éã«ã¯MSVCãå®è¡ããçŽç²ãªGoããã°ã©ã ãäœæã§ããŸããïŒ
goããŒã«ã«é¢ããéãGCCã®ããã«åäœãããå®éã«ã¯MSVCãå®è¡ããçŽç²ãªGoããã°ã©ã ãäœæã§ããŸããïŒ
ç§ã¯ãããããŸããããããããªããšä¿¡ããŠããŸããç§ããã®éã§äœããé²ããããšãã§ãããã©ããèŠãŠã¿ãŸãããã
ããã«ãä»ã®ããŒã«ã«ã³ãã³ãã©ã€ã³ãã©ã°ãè¿œå ããããšãåé¡ã«ãªããã©ãããæ確ã«ããå¿ èŠããããšæããŸãã çŸåšããã®ããã®å æ¬çãªãããã¯ãããŸããŸãªããŒã«ã§ããã€ãã®æ°ããã³ãã³ãã©ã€ã³ãã©ã°ãäœæããŠããŸã
ãŸãã次ã®ãã«ããªãã·ã§ã³/ cgoç°å¢å€æ°ãäœæããŸãã
MSCXX
MSCC
MSCFLAGS
MSCPPFLAGS
MSCXXFLAGS
MSLDFLAGS
æ°åéèããåŸãã³ã³ãã€ã©ã³ãã³ãããããã·ããã ãã§ã¯å æããã®ãé£ãããããããªãããã€ãã®ããŒãã«ããããŸãã
go build
ã¯ããã«ãããã©ã³ã¿ã€ã / cgoãã¡ã€ã«ã決å®ããããã«å€éšããŒã«ãã§ãŒã³ãäœã§ããããç¥ãå¿
èŠããããŸããããããªããšãäºææ§ã®ãªãgccããŒãžã§ã³ããããã·ã³ãã³ãã«æž¡ãã ãã«ãªããŸãã ãããã·èªäœã®å
éšã§ãããããã¯ããããšã¯ã§ãããããããŸããããruntime / cgoã«è¿œå ã®ãã¡ã€ã«ãè¿œå ãããå Žåãè匱ã§å£ããŠããŸãå¯èœæ§ããããŸããgo build
ã¯cmd / linkãåŒã³åºããŸãããã®ããŒã«ãã§ãŒã³ã¯ã.bssãã.dataãžã®åé
眮ãå®è¡ããç¹å®ã®ãã©ã°ããªã³ã«ãŒã«æž¡ãããšãã§ããããã«ãããŒã«ãã§ãŒã³ãç¥ãå¿
èŠããããŸãïŒåŸè
ãåŠçã§ããå¯èœæ§ããããŸãïŒãã ãããããã·èªäœã®äžéšã§ãïŒgo build
䜿çšããŠmsvcãã«ãã決å®ããç°å¢å€æ°ãæå®ããŸããïŒ msvcã䜿çšããŠããã°ã©ã ãæ§ç¯ãããã ãã®äººã«ãšã£ãŠã¯ãããŒãé«ããªããšæããŸãããvsvars.batå
ã§å®è¡ããããšã«å ããŠãè€æ°ã®ç°å¢å€æ°ãèšå®ããå¿
èŠããããŸãïŒå°ãªããšãCC
ãšUNDECIDED_TURN_ON_MSVC_BUILD_VAR
ïŒ
å¥ã®æ¹æ³ã¯ãæå®ãããCC
ã§go build
åœã®noopã³ãã³ããå®è¡ãããããŽ/ããããŒã解æããŠmsvcãŸãã¯gccãã©ãããæ€åºãããã®æç¹ã§é©åãªããŒã«ãã§ãŒã³ã®èª¿æŽãç¶è¡ããããšã§ãã ...ãããã©ãã»ã©è匱ã§ãããããŸãã¯clangã®ãããªmsvcäºæããŒã«ãã§ãŒã³ã§ã©ã®ããã«æ©èœãããã¯ããããŸããã
æè¿ãã®Githubã®åé¡ãçºèŠããŸãããããã®äœæ¥ã¯ç§ã«ãšã£ãŠéåžžã«ãšããµã€ãã£ã³ã°ã§ãã è¿ãå°æ¥ããããã©ããã«çéžããããšãé¡ã£ãŠããŸãã
ç§ã®æå³ã¯ãWindowsäžã®CGoããMSVCã䜿çšããŠæ§ç¯ããããµãŒãããŒãã£ã³ãŒãã®ã©ãããŒãšããŠäœ¿çšããããšã§ãã mingw-w64
ã䜿çšããŠãœãŒã¹ããåæ§ç¯ããããšã¯ã§ããŸããã ç§ã¯ãããå®è¡ããããã®æ¯èŒçæ·±å»ãªãã¹ãã±ãŒã¹ãããã€ãæã£ãŠããã®ã§ããããããªãããŸãæ€èšŒããããšãã§ããŸãã
ãšã«ããã @ cchamplinãšããã«åãçµãã§ããä»ã®äººã«æè¬ããŸãããããŠãšã«ããç§ãå©ããããšãã§ããããšãç§ã«ç¥ãããŠãã ããã
@cchamplinç§ã¯ãWindowsãšcgoã®ã³ã³ãã€ã©ããŒã«ãã§ãŒã³ã«ã€ããŠå±éºã§ããããšãååã«ããã£ãŠããã®ã§ãæ¯æŽã§ããå¯èœæ§ããããŸãã ããªããåãçµãã§ãããã®ã®ããã€ãã«ã€ããŠç§ã«è¿œãã€ãããšãã§ããŸããïŒ ç§ãæ¯æŽããããã«äœãã§ããããèŠãŠãããŸãã @deadprogramã®ãŠãŒã¹ã±ãŒã¹ãç¥ã£ãŠããã®ã§ããã¹ãã®æºåãã§ããããé«åºŠãªãã¹ãããããçšæããŠããŸãã
ãã@mxplusb ããããã¯å®éã«ã¯å€ããå°ãªããæºåãã§ããŠããŸãã æéãèŠã€ããããšãã§ããã°ãä»å€ãŸãã¯ææ¥ãgerritã«å€æŽãéä¿¡ããŸããããã«ããããã¹ãŠã®ã¬ãã¥ãŒãæŽæ°ãããã³æ¿èªãåããããã®äœæ¥ãéå§ãããŸãã
å€æŽhttps://golang.org/cl/133937ã¯ãã®åé¡ã«èšåããŠããŸãïŒ cmd/link: Add flag rlocbss to relocate .bss data to .data
å€æŽhttps://golang.org/cl/133938ã¯ãã®åé¡ã«èšåããŠããŸãïŒ runtime/cgo: MSVC toolchain support in cgo native code
å€æŽhttps://golang.org/cl/133939ã¯ãã®åé¡ã«èšåããŠããŸãïŒ cmd/cgo: Add toolchain flag to cgo command for MSVC support
å€æŽhttps://golang.org/cl/133946ã¯ãã®åé¡ã«èšåããŠããŸãïŒ cmd/compile: Add support for MSVC toolchain to go build
äžéšã®ã³ãããã§åé¡ãã¿ã€ããã¹ããããã§ãã ã¬ãã¥ãŒããã»ã¹ãéå§ããä¿®æ£ããããã®æè¯ã®æ¹æ³ã決å®ããŸãã
å€æŽhttps://golang.org/cl/133943ã¯ããã®åé¡ã«ã€ããŠèšåããŠããŸãïŒ cmd/cgo: Add support for CC_FOR_CGO environment variable
å€æŽhttps://golang.org/cl/133942ã¯ãã®åé¡ã«èšåããŠããŸãïŒ tests: Update various tests to prepare for MSVC compiler toolchain
å€æŽhttps://golang.org/cl/133940ã¯ãã®åé¡ã«èšåããŠããŸãïŒ misc/cgo: Adjust tests to be compatible with MSVC toolchain support
å€æŽhttps://golang.org/cl/133941ã¯ãã®åé¡ã«èšåããŠããŸãïŒ runtime: Add runtime.CompilerType to denote between host compiler type
å€æŽhttps://golang.org/cl/133945ã¯ãã®åé¡ã«èšåããŠããŸãïŒ cmd/link: Add external toolchain support for MSVC
å€æŽhttps://golang.org/cl/133944ã¯ãã®åé¡ã«èšåããŠããŸãïŒ cmd/compile, cgo: Add support for MSVC flags
@cchamplinæçµæ±ºå®ã¯äœã§ããã説æã§ããŸããïŒ MSVCãµããŒãã¯ã©ã®ããã«èŠããŸããïŒ ã©ã®ã³ãã³ãã©ã€ã³ãã©ã°ãè¿œå ãããŸããïŒ MSVCã®ããŠã³ããŒãã«å ããŠããŠãŒã¶ãŒã¯èªåã®ç°å¢ã«å¯ŸããŠäœãããå¿ èŠããããŸããïŒ ããããšã
ãŸããã©ãããã°ãã®ããããè©Šãããšãã§ããŸããïŒ ãªããžããªã§ã³ããããèŠã€ãããŸããã§ããã
@raskyå€æŽãã¬ãã¥ãŒãããŠããããããŸã å°ãæµåçã§ãã èšå®ããå¿ èŠã®ããç¹å®ã®ã³ãã³ãã©ã€ã³ãã©ã°ã¯ãããããªãã§ããããCCç°å¢å€æ°ãMSVCãæãããCCãèšå®ãããŠããªãcgoã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã ãã§ãcl.exeã¯ãã¹äžã«ãããŸãããgccã¯ããã§ã¯ãããŸããã
@blizzardplusäžèšãšåæ§ã«ãã¬ãã¥ãŒã§ã¯çŸåšå€ãã®ããšãæµåçã§ãããããè©ŠããŠã¿ãã®ã¯å°ãæ©ããããããŸããïŒãã ããããªã次第ã§ãïŒã é¢é£ãããã¹ãŠã®å€æŽã¯ãgopherbotã«ãã£ãŠãã®åé¡ã«æçš¿ãããŸãããããã§ãããããèŠã€ããããšãã§ããŸãã
@cchamplinã¯ã gcc
ãŸãã¯clang
ããããã䜿çšããã¯ãã¹ã³ã³ãã€ã«ã®ãµããŒãããããŸããïŒ ãããããªãã圌ãã¯ãã¹ããããŠããŸããïŒ
@cchamplin 9/11以éãCLã§ã®æŽ»åã¯èŠãããŸãããããã«ã€ããŠã¯åé²ãèŠãããŸããããããšãè¿œå ã®ãªãœãŒã¹ãå¿ èŠã§ããïŒ
ããã¯ããã®åŸã«è¡ãããŠããªãå Žåã¯- C-ã¢ãŒã«ã€ãctorsã»ã¯ã·ã§ã³ã.CRT $ XCUïŒhttps://msdn.microsoft.com/en-us/library/bb918180.aspxïŒã«å€æŽãããªããã°ãªããªãããã®äœæ¥ã«ã¯ããã®ãã@cchamplin golangã©ã³ã¿ã€ã ã¯åæåãããŸããã ãŸããããã«èšå®ãããšãgccã§ãæ£åžžã«æ©èœããããšãããããŸã-gcc stilã¯ãããã®é¢æ°ãååŸããããã¹ãã»ã¯ã·ã§ã³ã«ç§»åããmainãå€æŽããŠå®éã®mainã®åã«åŒã³åºããŸãã Visual Studioã¯.aã¢ãŒã«ã€ããã¡ã€ã«ãç解ã§ããŸããããªã³ã³ãã€ã«/ã¢ã»ã³ãã«ããããã¡ã€ã«ã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯Cã§ããããããããã¢ãŒã«ã€ãã«å«ããã ãã§åé¡ã¯çºçããŸããã 2ã€ã®.textã»ã¯ã·ã§ã³ã«é¢ããèŠåããããŸãããåçŽãªã±ãŒã¹ã¯æ£åžžã«æ©èœããŠããããã§ãïŒåé¡ããªãããšã確èªããããã«ããã«ãã¹ããå¿ èŠã§ãïŒã
ãŸãããããc-sharedã§æ©èœããããã«ã¯ããšã¯ã¹ããŒããããé¢æ°ã__declspecïŒdllexportïŒã§è£ 食ããå¿ èŠããããŸããã// exportã®ãã®å±éãã©ãã§çºçããããããããŸããã
@ blizzardplusclang -MSVCããµããŒãããããã®ãã©ããŒã¢ãããããããããŸãã ãã®å Žåãã¯ãã¹ã³ã³ãã€ã«ãšã¯ã©ãããæå³ãããããŸãããïŒ Windows以å€ã®ã·ã¹ãã ã§ã¯MSVCããŒã«ãã§ãŒã³ã䜿çšã§ããªããªããŸãã ä»ã®ã¯ãã¹ã³ã³ãã€ã«æ©èœã¯å€æŽããªãã§ãã ããã
@ksheltonæ®å¿µãªãããç§ãçºè¡šããŠããäœåãäŒè°ã«ã¯ä»ã®ãããžã§ã¯ããããã®ã§ãããã¯ç§ã«ãšã£ãŠéåžžã«å¿ããææã§ãã 12æãŸã§ããããã«å¿ èŠãªãªãã¡ã¯ã¿ãªã³ã°ãåãæ»ãããšãã§ããªãå ŽåããããŸãã
@ksheltonããããšãã ããããå確èªããŠããŸãããc-archiveãMSVCã§æ©èœããªãããŸãã¯å ·äœçã«ç¡å¹ã«ããããšãåæã«éçºãããšæããŸããïŒ ãã©ã°ã€ã³/å ±æãWindowsã§åäœãããããšãããšãã«ããšã¯ã¹ããŒããé©åã«è£ 食ããããšè©Šã¿ãŸããã ç§ãä¿¡ããŠããä»ã®åé¡ããããŸãããç§ã¯2ã€ã®åé¡ãæ··åããŠããå¯èœæ§ããããŸãã ELFãšWindows.edataãidataãããã³EATã®PLT / GOTã«å ±æã³ãŒããé 眮ããæ¹æ³ã«ã¯å®éã®åé¡ããããŸãã ç§ãçŽé¢ããåé¡ã®ã»ãšãã©ã¯ã移転ãšãããæ©èœãããããšãã§ããªãããšã«é¢ãããã®ã ã£ããšæããŸãã 誰ããããã«ã€ããŠæŽå¯ãæã£ãŠãããªããããã¯çŽ æŽãããã§ãããã ïŒ19282ãåç §
@cchamplinç§ãããªãã®CLã®äžã«Goãæ§ç¯ã§ãããã©ããèŠãŠã¿ãŸãã
https://go-review.googlesource.com/c/go/+/133946/3
ãã®ããããã¡ã€ã«ã䜿çšããŠç°å¢ãèšå®ããŸãã
set TERM=msys
set MYHOME=c:\users\alex\dev
set GOROOT=%MYHOME%\go
set GOROOT_BOOTSTRAP=%MYHOME%\go1.4.3
set GOPATH=%MYHOME%
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
set CC=cl
set PATH=%PATH%;%MYHOME%\my\bin\;%GOROOT%\bin
cd %GOROOT%\src
CMD
make.batãå®è¡ãããšããã®ãšã©ãŒãçºçããŸã
C:\Users\Alex\Desktop>set TERM=msys
C:\Users\Alex\Desktop>set MYHOME=c:\users\alex\dev
C:\Users\Alex\Desktop>set GOROOT=c:\users\alex\dev\go
C:\Users\Alex\Desktop>set GOROOT_BOOTSTRAP=c:\users\alex\dev\go1.4.3
C:\Users\Alex\Desktop>set GOPATH=c:\users\alex\dev
C:\Users\Alex\Desktop>call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0.26730.12
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
Microsoft Windows [Version 10.0.17134.407]
(c) 2018 Microsoft Corporation. All rights reserved.
c:\Users\Alex\dev\go\src>make
Building Go cmd/dist using c:\users\alex\dev\go1.4.3
go tool dist: cannot invoke C compiler "cl": exit status 2
Go needs a system C compiler for use with cgo.
To set a C compiler, set CC=the-compiler.
To disable cgo, set CGO_ENABLED=0.
Command output:
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25507.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
cl : Command line warning D9002 : ignoring unknown option '--help'
cl : Command line error D8003 : missing source filename
The system cannot find the batch label specified - fail
c:\Users\Alex\dev\go\src>
ããã§äœãæ¬ ããŠããŸããïŒ
ããããšãããããŸããã
ã¢ã¬ãã¯ã¹
@alexbrainman
ããã§äœãæ¬ ããŠããŸããïŒ
å°ãªããšãCC_FOR_CGO = gccãèšå®ããå¿ èŠããããŸãã ãŸããMSVCã䜿çšããŠèªåèªèº«ãæ§ç¯ããããšããããšããããŸããã ãããæ©èœãããã©ãã/ãµããŒãããå¿ èŠããããã©ããã¯ããããŸããã
-NS
å°ãªããšãCC_FOR_CGO = gccãèšå®ããå¿ èŠããããŸãã
https://go-review.googlesource.com/c/go/+/133940ã«ã¯ãããã€ãã®ãã¹ããå«ãŸããŠããŸãã ãã¹ãã«åæ Œããããšã確èªããã«ã¯ã©ãããã°ããã§ããïŒ æ£ç¢ºãªæé ã¯äœã§ããïŒ
ãŸããGoãã«ããŒhttps://build.golang.orgã¯ïŒ GOROOTïŒ \ src \ all.batãå®è¡ããŠããã¹ãŠã®ãã¹ãïŒhttps://go-review.googlesource.com/c/go/+/ã«ãªã¹ããããŠãããã®ãå«ãïŒãæ€èšŒããŸãã 133940ïŒåæ Œã ïŒ GOROOTïŒ \ src \ all.batãhttps://go-review.googlesource.com/c/go/+/133940ãã調æŽããããã¹ããå®è¡ããããã«Goã³ãŒããå€æŽããããšãã©ã®ããã«ææ¡ããŸãã
ãŸããMSVCã䜿çšããŠèªåèªèº«ãæ§ç¯ããããšããããšããããŸããã ãããæ©èœãããã©ãã/ãµããŒãããå¿ èŠããããã©ããã¯ããããŸããã
gccãã€ã³ã¹ããŒã«ããªããŠããall.batãå®è¡ããŠæ£åžžã«å®äºããããšãã§ããŸãã çŸåšã®ããŒãžã§ã³ã®Goããã«ãããã«ã¯ãå¥ã®ããŒãžã§ã³ã®GoïŒå°ãªããšãgo1.4ïŒã®ã¿ãå¿ èŠã§ãã Cgoã ããCã³ã³ãã€ã©ãå¿ èŠãšããŸããç§ã¯ããªãã®å€æŽãMSVCã«ãã£ãŠæ§ç¯ãããCgoããŒãžã§ã³ãå®è£ ããŠãããšããå°è±¡ãåããŸããã ãããããããããç§ã¯ééã£ãŠããŸãã ç§ãééã£ãŠããå Žåã¯ç§ãèšæ£ããŠãã ããã
ããããšãããããŸããã
ã¢ã¬ãã¯ã¹
@alexbrainman
https://go-review.googlesource.com/c/go/+/133940ã«ã¯ãããã€ãã®ãã¹ããå«ãŸããŠããŸãã ãã¹ãã«åæ Œããããšã確èªããã«ã¯ã©ãããã°ããã§ããïŒ æ£ç¢ºãªæé ã¯äœã§ããïŒ
ãããããall.batã¯gccããŒãžã§ã³ãšmsvcããŒãžã§ã³ã®äž¡æ¹ã®ãã¹ãããã¹ãã§ããŸãã ãããããå®è¡ãããã¹ãã®ããŒãžã§ã³ãall.batã«æ瀺ããç°å¢å€æ°ã䜿çšã§ããŸãããã®å Žåã2ã€ã®ç°ãªããã«ããŒã«ç°ãªãããŒãžã§ã³ã®ãã¹ããå®è¡ãããããšãã§ããŸãã ããªãã¯ããã«ã€ããŠãã¹ãŠèããŸãããïŒ
ã¯ãããã®æ£ç¢ºãªã¡ã«ããºã ã¯https://go-review.googlesource.com/c/go/+/133946/ã§äœ¿çšãããŠã
gccãã€ã³ã¹ããŒã«ããªããŠããall.batãå®è¡ããŠæ£åžžã«å®äºããããšãã§ããŸãã çŸåšã®ããŒãžã§ã³ã®Goããã«ãããã«ã¯ãå¥ã®ããŒãžã§ã³ã®GoïŒå°ãªããšãgo1.4ïŒã®ã¿ãå¿ èŠã§ãã Cgoã ããCã³ã³ãã€ã©ãå¿ èŠãšããŸããç§ã¯ããªãã®å€æŽãMSVCã«ãã£ãŠæ§ç¯ãããCgoããŒãžã§ã³ãå®è£ ããŠãããšããå°è±¡ãåããŸããã ãããããããããç§ã¯ééã£ãŠããŸãã ç§ãééã£ãŠããå Žåã¯ç§ãèšæ£ããŠãã ããã
ããªãã¯æ£ããã§ãã Goèªäœã¯æ£åžžã«æ§ç¯ãããã¯ãã§ãã GOTESTMSVC = 1ã®ãšãã«run.batãããã€ãã®ç°å¢å€æ°ãèšå®ããããã«å€æŽãããããããã¹ãã«å°éãããšãã«åé¡ãçºçããå¯èœæ§ããããŸãã goãmsvcã§ãã«ããããŠãããã©ãããæ€åºãããã¹ãã倱æããªãããã«é©åãªdistç°å¢å€æ°ãèšå®ããããšãã§ããŸãã
次ã«ãGOTESTMSVC = 1ããã³GOVSVARSPATH = somevsvars.batãã¹ãèšå®ããŸãã ãã®åŸãall.batã䜿çšãããã«ãã§ãgccãã¹ããšmsvccgoãã¹ãã®äž¡æ¹ãå®è¡ããå¿ èŠããããŸãã
ãã£ãŠã¿ãŸããã
䜿ã£ã
commit e56d52f66b95b87001867a2487a11bd961f40d4d (HEAD)
Author: Caleb Champlin <[email protected]>
Date: Sat Sep 8 00:26:32 2018 -0600
cmd/compile: add support for MSVC toolchain to go build
Allows building with MSVC as an external compiler/linker.
Setting CC=cl.exe inside an MSVC environment will automatically
build cgo executables using MSVC as the external compiler and
linker.
For the builders setting the environment variable GOVSVARSPATH
to the location of a msvsvars.bat file and setting the
environment variable GOTESTMSVC=1 will automatically cause
all.bat to run tests and compiler with both gcc and MSVC.
Updates #20982
Change-Id: I44be1f43aa0d53a688c595bc8336e0364b809ced
ç§ã¯æåã«ãã®ããããã¡ã€ã«ãå®è¡ããŸãïŒ
set TERM=msys
set MYHOME=c:\users\alex\dev
set GOROOT=%MYHOME%\go
set GOROOT_BOOTSTRAP=%MYHOME%\go1.4.3
set GOPATH=%MYHOME%
set MINGW=%MYHOME%\mingw64_4.9.1
set GOTESTMSVC=1
set GOVSVARSPATH="C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
set PATH=%PATH%;%MINGW%\bin;%MYHOME%\my\bin\;%GOROOT%\bin
cd %GOROOT%\src
CMD
次ã«ã all.bat
ãŸãã all.bat
ã¯ã§å€±æããŸã
--- FAIL: TestDocsUpToDate (0.00s)
help_test.go:26: alldocs.go is not up to date; run mkalldocs.sh to regenerate it
go test proxy starting
go test proxy running at GOPROXY=http://127.0.0.1:52023/mod
go proxy: no archive w.1 v1.2.0
go proxy: no archive x.1 v1.0.0
go proxy: no archive z.1 v1.2.0
go proxy: no archive rsc.io v1.5.0
go proxy: no archive example.com/unused v0.0.0
go proxy: no archive example.com/unused v0.0.0
go proxy: no archive sub.1 v1.0.0
go proxy: no archive badsub.1 v1.0.0
go proxy: no archive versioned.1 v1.0.0
go proxy: no archive versioned.1 v1.1.0
go proxy: no archive golang.org/x/text/language 14c0d48
go proxy: no archive golang.org/x/text/language 14c0d48
go proxy: no archive golang.org/x/text/language 14c0d48
go proxy: no archive golang.org/x/text/foo 14c0d48
go proxy: no archive golang.org/x 14c0d48
go proxy: no archive golang.org 14c0d48
go proxy: no archive example.com/split/subpkg v1.0.0
FAIL
FAIL cmd/go 147.247s
ok cmd/go/internal/cache 13.115s
ok cmd/go/internal/dirhash 0.518s
ok cmd/go/internal/generate 0.180s
ok cmd/go/internal/get 0.761s
ok cmd/go/internal/imports 0.212s
ok cmd/go/internal/load 1.050s
ok cmd/go/internal/modconv 1.596s
ok cmd/go/internal/modfetch 0.881s
ok cmd/go/internal/modfetch/codehost 0.179s
ok cmd/go/internal/modfile 0.193s
ok cmd/go/internal/modload 2.820s
ok cmd/go/internal/module 0.860s
ok cmd/go/internal/mvs 0.255s
ok cmd/go/internal/par 0.107s
ok cmd/go/internal/search 0.087s
ok cmd/go/internal/semver 0.140s
ok cmd/go/internal/txtar 0.249s
ok cmd/go/internal/web2 0.136s
ok cmd/go/internal/work 0.200s
ok cmd/gofmt 0.216s
ok cmd/internal/buildid 0.522s
ok cmd/internal/dwarf 0.077s
ok cmd/internal/edit 0.160s
ok cmd/internal/goobj 2.430s
ok cmd/internal/obj 0.103s
ok cmd/internal/obj/arm64 0.190s
ok cmd/internal/obj/x86 0.845s
ok cmd/internal/objabi 0.063s
ok cmd/internal/src 0.093s
ok cmd/internal/test2json 0.253s
ok cmd/link 6.285s
ok cmd/link/internal/ld 24.147s
ok cmd/link/internal/sym 0.887s
ok cmd/nm 7.678s
ok cmd/objdump 2.772s
ok cmd/pack 3.256s
ok cmd/trace 0.449s
ok cmd/vendor/github.com/google/pprof/internal/binutils 0.479s
ok cmd/vendor/github.com/google/pprof/internal/driver 6.103s
ok cmd/vendor/github.com/google/pprof/internal/elfexec 0.079s
ok cmd/vendor/github.com/google/pprof/internal/graph 0.455s
ok cmd/vendor/github.com/google/pprof/internal/measurement 0.066s
ok cmd/vendor/github.com/google/pprof/internal/report 0.154s
ok cmd/vendor/github.com/google/pprof/internal/symbolizer 0.096s
ok cmd/vendor/github.com/google/pprof/internal/symbolz 0.078s
ok cmd/vendor/github.com/google/pprof/profile 0.527s
ok cmd/vendor/github.com/ianlancetaylor/demangle 0.109s
ok cmd/vendor/golang.org/x/arch/arm/armasm 0.424s
ok cmd/vendor/golang.org/x/arch/arm64/arm64asm 0.537s
ok cmd/vendor/golang.org/x/arch/ppc64/ppc64asm 0.155s
ok cmd/vendor/golang.org/x/arch/x86/x86asm 0.239s
ok cmd/vendor/golang.org/x/crypto/ssh/terminal 0.174s
ok cmd/vendor/golang.org/x/sys/windows 0.334s
ok cmd/vendor/golang.org/x/sys/windows/registry 0.199s
ok cmd/vendor/golang.org/x/sys/windows/svc 0.316s
ok cmd/vendor/golang.org/x/sys/windows/svc/eventlog 0.089s
ok cmd/vendor/golang.org/x/sys/windows/svc/mgr 0.432s
ok cmd/vet 6.392s
ok cmd/vet/internal/cfg 0.102s
2018/12/16 15:55:18 Failed: exit status 1
ãŸããGOTESTMSVCãšGOVSVARSPATHãèšå®ãããšãall.batãå®è¡ãããŠãŒã¶ãŒã«æå¹ãªå ŽåããããŸãã ããããCgoã«MSVCã䜿çšããå¿ èŠãããå Žåãå€æŽã®ä»ã®ãŠãŒã¶ãŒã¯äœãããŸããïŒ ãã®ããã®ããªãã®èšç»ã¯äœã§ããïŒ
ã¢ã¬ãã¯ã¹
@alexbrainman
äœãèµ·ãã£ãŠããã®ãããããŸããã ãã®ãã¹ãã¯ãã¹ã¿ãŒã§ç§ã«ãšã£ãŠå€±æããŠããŸã
> git status
On branch master
Your branch is up to date with 'origin/master'
> cd src\cmd\go
> go test .\help_test.go
--- FAIL: TestDocsUpToDate (0.00s)
help_test.go:26: alldocs.go is not up to date; run mkalldocs.sh to regenerate it
help.go https://github.com/golang/go/blob/c040786f37246f40ae29402fbdb6e97031a21713/src/cmd/go/internal/help/help.go#L37
base.Go.Commandsãç¹°ãè¿ãåŠçããŸãã ããã¯main.goã§åæåãããŸãhttps://github.com/golang/go/blob/c040786f37246f40ae29402fbdb6e97031a21713/src/cmd/go/main.go#L43
ãããããã®inité¢æ°ããã¹ãå®è¡å¯èœãã¡ã€ã«ã§ã©ã®ããã«åŒã³åºããããã¯ããããŸããããããã£ãŠãããã¯å
šé¢çã«å€±æããã¯ããªã®ã§ããã¹ã¿ãŒãçŸåšã©ã®ããã«ãã¹ãã«åæ ŒããŠãããããããŸããã
ãŸããGOTESTMSVCãšGOVSVARSPATHãèšå®ãããšãall.batãå®è¡ãããŠãŒã¶ãŒã«æå¹ãªå ŽåããããŸãã ããããCgoã«MSVCã䜿çšããå¿ èŠãããå Žåãå€æŽã®ä»ã®ãŠãŒã¶ãŒã¯äœãããŸããïŒ ãã®ããã®ããªãã®èšç»ã¯äœã§ããïŒ
ãããã£ãŠãMSVCã䜿çšããŠCgoã³ãŒãããã«ããããã ãã®ç¶æ³ã§ã¯
call vsvars64.bat
set CC_FOR_CGO=gcc
set CC=cl.exe
go build
å¿ èŠãªã®ã¯ããã ãã ãšæããŸã
ãã®inité¢æ°ããã¹ãå®è¡å¯èœãã¡ã€ã«ã§ã©ã®ããã«åŒã³åºããããããããªãã®ã§ããã¹ã¿ãŒãçŸåšã©ã®ããã«ãã¹ãã«åæ ŒããŠãããããããŸãããããã¯å šé¢çã«å€±æããã¯ãã ãšæããŸãã
cmd / goå
ã®ãã¡ã€ã«ã§go test
ã䜿çšããå ŽåãgoããŒã«ã¯cmd / goããã±ãŒãžããã«ãããŠãããã¹ãããã«ããããã¹ããã©ã€ããŒãçæããŠãã«ããããã¹ãŠãæ°ããã¡ã€ã³ããã±ãŒãžã«ãªã³ã¯ããŸãã ããã¯ãcmd / goèªäœãã¡ã€ã³ããã±ãŒãžã§ããå Žåã§ãçºçããŸãã ã€ãŸããcmd / go / *ãgoã®ã¡ã€ã³ããã±ãŒãžã¯ããã¹ãã®ç®çã§ã¯éã¡ã€ã³ããã±ãŒãžãšããŠæ±ãããŸãã ããã«ãããå¿
èŠã«å¿ããŠããã¹ãã§ã¡ã€ã³ããã±ãŒãžã§å®çŸ©ãããŠããé¢æ°ãåŒã³åºãããšãã§ããŸãã
ç³ãèš³ãããŸããããè¿ä¿¡ãé ããªããŸãã ããããç§ã«ã¯ãããããäžåºŠèª¿ã¹ãèªç±ãªæéããããŸããã§ããã
äœãèµ·ãã£ãŠããã®ãããããŸããã ãã®ãã¹ãã¯ãã¹ã¿ãŒã§ç§ã«ãšã£ãŠå€±æããŠããŸã
ãã¹ã¿ãŒã¯äœ¿ããŸããã§ããã ç§ã¯ããªãã®e56d52f66b95b87001867a2487a11bd961f40d4dã³ãããã䜿çšããŸããã ã¬ãã¥ãŒã®ããã«éä¿¡ããåã«ããã®ã³ãããã§all.batãå®è¡ããŸããã§ãããïŒ all.batã¯æåããŸãããïŒ ãã®ã³ãããã§all.batãããäžåºŠå®è¡ããŠãã·ã¹ãã æ§æã«é¢ä¿ããããã©ããã確èªã§ããŸããã ããããšãããããŸããã
ãããã£ãŠãMSVCã䜿çšããŠCgoã³ãŒãããã«ããããã ãã®ç¶æ³ã§ã¯
call vsvars64.bat set CC_FOR_CGO=gcc set CC=cl.exe go build
å¿ èŠãªã®ã¯ããã ãã ãšæããŸã
2ã€ã®ç°å¢å€æ°ã¯ããããããå¹³åçãªãŠãŒã¶ãŒã«ã¯è€éãããŸãã ãããŠã CC_FOR_CGO=gcc
ã¯ç§ã«ã¯å¥åŠã«èŠããŸã-ãªãMSVCã§ã³ãŒãããã«ãããããã«gccã䜿çšããã®ã§ããïŒ
ã¢ã¬ãã¯ã¹
@alexbrainman
ãã¹ã¿ãŒã¯äœ¿ããŸããã§ããã ç§ã¯ããªãã®e56d52f66b95b87001867a2487a11bd961f40d4dã³ãããã䜿çšããŸããã ã¬ãã¥ãŒã®ããã«éä¿¡ããåã«ããã®ã³ãããã§all.batãå®è¡ããŸããã§ãããïŒ all.batã¯æåããŸãããïŒ ãã®ã³ãããã§all.batãããäžåºŠå®è¡ããŠãã·ã¹ãã æ§æã«é¢ä¿ããããã©ããã確èªã§ããŸããã ããããšãããããŸããã
ãã¹ããå®è¡ãããšãã«å¥åŠãªçµæãåŸãããã®ã¯ãç§ã®ã·ã¹ãã æ§æãšé¢ä¿ããããšæããŸãã ç§ã¯åé¡ãä¿®æ£ããå€æŽã»ããã«ããã€ãã®æŽæ°ãããã·ã¥ãããšæããŸãã
2ã€ã®ç°å¢å€æ°ã¯ããããããå¹³åçãªãŠãŒã¶ãŒã«ã¯è€éãããŸãã ãããŠãCC_FOR_CGO = gccã¯ç§ã«ã¯å¥åŠã«èŠããŸã-ãªãMSVCã§ã³ãŒãããã«ãããããã«gccã䜿çšããã®ã§ããïŒ
ç§ã®ééãã§ãããå®éã«ã¯ããããCC_FOR_CGO = gcc.exeã§ããã¯ãã§ãã ããããããªãã®è³ªåã«çããããã«; gerritããïŒ
PS1ã1324è¡ç®ïŒ
cgoã«ã¯ãååæã«äœ¿çšã§ããgccããŸã å¿ èŠã§ãã CCãMSVCã³ã³ãã€ã©ã«èšå®ãããŠããå Žåãcgoã«ã¯CC_FOR_CGOã«ãã£ãŠæäŸãããGCCãåŒã³åºãæ段ãå¿ èŠã§ãã æ®å¿µãªãããMSVCããŒã«ãã§ãŒã³ã«ã¯ãgccããåéãããŠããã®ãšåãã¿ã€ãã®æ å ±ãæäŸããã¡ã«ããºã ããããŸããã çè«çã«ã¯ãcgoã§äœ¿çšãããåæ å ±ãåéããããã«ãgoåºæã®ããŒã«ãäœæã§ããŸãããç¯å²å€ã§ãããããªãã®åŽåããããå¯èœæ§ããããŸãïŒC / C ++ã³ãŒãã®éçååæãå®è¡ããããã«å人çã«äœããæžããããšã¯ãããŸããïŒã
ãŸããGCCãšMSVCã®å®è¡ã®éã«ãã£ãã·ã¥ãã¯ãªã¢ãããç¶æ ã§äœããå£ããããã§ãããäžéšã®ãã¹ãããŸã ãã£ãã·ã¥ãããŠãããã®ããã«åäœããŠããçç±ãããããŸããã
ç§ã¯åé¡ãä¿®æ£ããå€æŽã»ããã«ããã€ãã®æŽæ°ãããã·ã¥ãããšæããŸãã
ãã®ã»ããã¢ããhttps://github.com/golang/go/issues/20982#issuecomment-447618566 on
commit 5479fc9fe61fb998082fea5cb423314cc1afa649 (HEAD)
Author: Caleb Champlin <[email protected]>
Date: Sat Sep 8 00:26:32 2018 -0600
cmd/compile: add support for MSVC toolchain to go build
Allows building with MSVC as an external compiler/linker.
Setting CC=cl.exe inside an MSVC environment will automatically
build cgo executables using MSVC as the external compiler and
linker.
For the builders setting the environment variable GOVSVARSPATH
to the location of a msvsvars.bat file and setting the
environment variable GOTESTMSVC=1 will automatically cause
all.bat to run tests and compiler with both gcc and MSVC.
Updates #20982
Change-Id: I44be1f43aa0d53a688c595bc8336e0364b809ced
ç§ãããã«é£ããŠè¡ããŸãããããã§ã倱æããŸã
##### API check
+pkg go/build, type Context struct, CompilerType string
+pkg go/build, type Package struct, CgoMSCFLAGS []string
+pkg go/build, type Package struct, CgoMSCPPFLAGS []string
+pkg go/build, type Package struct, CgoMSCXXFLAGS []string
+pkg go/build, type Package struct, CgoMSLDFLAGS []string
+pkg os, method (*File) SyscallConn() (syscall.RawConn, error)
ALL TESTS PASSED
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0.26730.12
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
# runtime/cgo
msvc_libinit_windows.c
msvc_libinit_windows.c(133): error C2220: warning treated as error - no 'object' file generated
msvc_libinit_windows.c(133): warning C4710: 'int fprintf(FILE *const ,const char *const ,...)': function not inlined
C:\Program Files (x86)\Windows Kits\10\include\10.0.15063.0\ucrt\stdio.h(826): note: see declaration of 'fprintf'
go tool dist: FAILED: go install -gcflags=all= -ldflags=all= std cmd: exit status 2
c:\Users\Alex\dev\go\src>
ç§ã®ééãã§ãããå®éã«ã¯ããããCC_FOR_CGO = gcc.exeã§ããã¯ãã§ãã
gcc.exeã®.exeã«ã€ããŠã¯æ°ã«ããŸããã ç§ã®åé¡ã¯
MSVCã䜿çšããã«ã¯gccããŒã«ãšMSVCããŒã«ã®äž¡æ¹ãå¿ èŠã§ãïŒãŠãŒã¶ãŒã«èª¬æããã®ã¯é£ããã§ãããïŒããããã«ã€ããŠã¯äœãã§ããªãããšãç解ããŠããŸãã
äž¡æ¹ã®ç°å¢å€æ°CC_FOR_CGO = gccãšCC = cl.exeãèšå®ããå¿ èŠããããŸãã-CC_FOR_CGOãåžžã«gccã«èšå®ãããŠãããšä»®å®ã§ããŸããïŒ
ããããããªãã®è³ªåã«çããããã«; gerritããïŒ
説æããããšãããããŸãã
ã¢ã¬ãã¯ã¹
@alexbrainman
# runtime/cgo
msvc_libinit_windows.c
msvc_libinit_windows.c(133): error C2220: warning treated as error - no 'object' file generated
msvc_libinit_windows.c(133): warning C4710: 'int fprintf(FILE *const ,const char *const ,...)': function not inlined
C:\Program Files (x86)\Windows Kits\10\include\10.0.15063.0\ucrt\stdio.h(826): note: see declaration of 'fprintf'
go tool dist: FAILED: go install -gcflags=all= -ldflags=all= std cmd: exit status 2
ã©ããããããmsvc_libinit_windows.cã®å¥ã®/å€ãã³ããŒãæã£ãŠããªãéãããã®èŠåãã©ã®ããã«çºçãããã¯ããããŸããã ãã®è¡ãå«ãŸããŠããããšã確èªã§ããŸããïŒ
// src/runtime/cgo/msvc_libinit_windows.c
#pragma warning(disable:4668 4255 4710)
stdioã€ã³ã¯ã«ãŒãã§ã¯C4710ãæå¶ããå¿ èŠããããŸãã ããªãã®ããŒãžã§ã³ã®MSVCã¯ç§ã®ããŒãžã§ã³ãšã¯å°ãç°ãªã£ãŠããããã§ããããããåå ã§ããå¯èœæ§ããããŸãã ãããããªã圌ããå¥ã®ããŒãžã§ã³ã§ãã®æå¶ãç©æ¥µçã«ç¡èŠããã®ãã¯ããããŸããã
ãŸããäœããã£ãŠãã°ããŒãã«ã«æå¶ãå«ããããã«å€æŽãå ããããšãã§ããŸã
// src/cmd/go/internal/work/exec.go
// Line 2719
cgoMSCPPFLAGS = append(cgoMSCFLAGS, "/wd4668") // this should be cgoMSCFLAGS = append(cgoMSCFLAGS, "/wd4668") I'll fix the change set to correct
+cgoMSCFLAGS = append(cgoMSCFLAGS, "/wd4710")
äž¡æ¹ã®ç°å¢å€æ°CC_FOR_CGO = gccãšCC = cl.exeãèšå®ããå¿ èŠããããŸãã-CC_FOR_CGOãåžžã«gccã«èšå®ãããŠãããšä»®å®ã§ããŸããïŒ
CC_FOR_CGOãèšå®ãããŠããªãå Žåã«gccãååšãããã©ãããgcoããã§ãã¯ããã®ã¯åé¡ãªããšæããŸãã CC_FOR_CGOã¯ããã¹ã«gccããªãç§ã®ãããªäººã ã®ããã®ãã®ã§ãã ç§ã®CC_FOR_CGOã¯ãCC_FOR_CGO = IïŒ\ Development \ tmd-gcc \ bingcc.exeã®ããã«ãªããŸãã GCCãMSVCãã«ãã®ãã¹äžã«ãªããšãããŠãŒã¹ã±ãŒã¹ããµããŒãããããªãå Žåã¯ãç§ã«ç¥ãããŠãã ãããç°å¢å€æ°ããŸãšããŠåãé€ãããšãã§ããŸãã
ãã®ããŒãžã§ã³ãããäžåºŠè©ŠããŸãã
commit 6741b7009d1894b5bf535d82ad46f4a379651670 (HEAD)
Author: Caleb Champlin <[email protected]>
Date: Sat Sep 8 00:26:32 2018 -0600
cmd/compile: add support for MSVC toolchain to go build
Allows building with MSVC as an external compiler/linker.
Setting CC=cl.exe inside an MSVC environment will automatically
build cgo executables using MSVC as the external compiler and
linker.
For the builders setting the environment variable GOVSVARSPATH
to the location of a msvsvars.bat file and setting the
environment variable GOTESTMSVC=1 will automatically cause
all.bat to run tests and compiler with both gcc and MSVC.
Updates #20982
Change-Id: I44be1f43aa0d53a688c595bc8336e0364b809ced
åããšã©ãŒãçºçããŸã
##### API check
+pkg go/build, type Context struct, CompilerType string
+pkg go/build, type Package struct, CgoMSCFLAGS []string
+pkg go/build, type Package struct, CgoMSCPPFLAGS []string
+pkg go/build, type Package struct, CgoMSCXXFLAGS []string
+pkg go/build, type Package struct, CgoMSLDFLAGS []string
+pkg os, method (*File) SyscallConn() (syscall.RawConn, error)
ALL TESTS PASSED
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0.26730.12
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
# runtime/cgo
msvc_libinit_windows.c
msvc_libinit_windows.c(133): error C2220: warning treated as error - no 'object' file generated
msvc_libinit_windows.c(133): warning C4710: 'int fprintf(FILE *const ,const char *const ,...)': function not inlined
C:\Program Files (x86)\Windows Kits\10\include\10.0.15063.0\ucrt\stdio.h(826): note: see declaration of 'fprintf'
go tool dist: FAILED: go install -gcflags=all= -ldflags=all= std cmd: exit status 2
c:\Users\Alex\dev\go\src>
ãã®è¡ãå«ãŸããŠããããšã確èªã§ããŸããïŒ
// src/runtime/cgo/msvc_libinit_windows.c #pragma warning(disable:4668 4255 4710)
ããã¯ç§ã®src / runtime / cgo /msvc_libinit_windows.cãã¡ã€ã«ã®å§ãŸãã§ã
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build cgo
#define WIN64_LEAN_AND_MEAN
// Suppress MSVC specific warnings.
// C4668: symbol' is not defined as a preprocessor macro,
// replacing with '0' for 'directives'.
// C4255: function' : no function prototype given: converting '()'
// to '(void)'.
// C4710: function' : function not inlined
#pragma warning(disable:4668 4255 4710)
#include <windows.h>
#include <process.h>
...
ãŸããäœããã£ãŠãã°ããŒãã«ã«æå¶ãå«ããããã«å€æŽãå ããããšãã§ããŸã
// src/cmd/go/internal/work/exec.go // Line 2719 cgoMSCPPFLAGS = append(cgoMSCFLAGS, "/wd4668") // this should be cgoMSCFLAGS = append(cgoMSCFLAGS, "/wd4668") I'll fix the change set to correct +cgoMSCFLAGS = append(cgoMSCFLAGS, "/wd4710")
ç§ã¯ãã®å€æŽãè¡ããŸããïŒ
c:\Users\Alex\dev\go\src>git diff
diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
index 49d1d849f5..9fb442ab95 100644
--- a/src/cmd/go/internal/work/exec.go
+++ b/src/cmd/go/internal/work/exec.go
@@ -2717,6 +2717,7 @@ func (b *Builder) cgo(a *Action, cgoExe, objdir string, pcCFLAGS, pcMSCFLAGS, pc
cgoLDFLAGS = append(cgoLDFLAGS, pcLDFLAGS...)
if cfg.BuildContext.CompilerType == "msvc" {
cgoMSCFLAGS = append(cgoMSCFLAGS, "/wd4668")
+ cgoMSCFLAGS = append(cgoMSCFLAGS, "/wd4710")
cgoMSCPPFLAGS = append(cgoMSCPPFLAGS, pcMSCFLAGS...)
cgoMSCPPFLAGS = append(cgoMSCPPFLAGS, "/c")
c:\Users\Alex\dev\go\src>
ããããåããšã©ãŒã衚瀺ãããŸã
##### API check
+pkg go/build, type Context struct, CompilerType string
+pkg go/build, type Package struct, CgoMSCFLAGS []string
+pkg go/build, type Package struct, CgoMSCPPFLAGS []string
+pkg go/build, type Package struct, CgoMSCXXFLAGS []string
+pkg go/build, type Package struct, CgoMSLDFLAGS []string
+pkg os, method (*File) SyscallConn() (syscall.RawConn, error)
ALL TESTS PASSED
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0.26730.12
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
# runtime/cgo
msvc_libinit_windows.c
msvc_libinit_windows.c(133): error C2220: warning treated as error - no 'object' file generated
msvc_libinit_windows.c(133): warning C4710: 'int fprintf(FILE *const ,const char *const ,...)': function not inlined
C:\Program Files (x86)\Windows Kits\10\include\10.0.15063.0\ucrt\stdio.h(826): note: see declaration of 'fprintf'
go tool dist: FAILED: go install -gcflags=all= -ldflags=all= std cmd: exit status 2
c:\Users\Alex\dev\go\src>
ã¢ã¬ãã¯ã¹
ç§ã¯æšå€ãããåçŸããããšããŠããŸããããåçŸã§ããŸããã§ããã ããªãããããçµéšããŠãããã©ããçåã«æããŸãïŒ https ïŒ
ææ°ã®SDKããã³ãã«ãããŒã«ã«æŽæ°ããããšã¯å¯èœã§ããïŒ SDK10.0.17763.0ã䜿çšããŠããŸãã ããã³ãã«ãããŒã«/ devenvã®ããŒãžã§ã³15.9.28307.222
MSVCã䜿çšããŠWindowsDLLãæ§ç¯ããããšããŠããŸãããGoã65535ãè¶ ããïŒãŸãã¯çªå·ã§ã¯ãªãïŒèŠåãç¡å¹ã«ããããšããŠãããããMSVCãåæ¢ããŠããããã§ãã
ãããã Werror
ã¯GCCãªãã·ã§ã³ã§ããããã¹ãŠã®èŠåããšã©ãŒãšããŠæ±ããŸãã
MSVCã®å Žåã WX
ã䜿çšããå¿
èŠããããŸãã
@pravicè¯ãç¹ãã©ãããã°ããã§ããïŒ ç§ã¯ãããèšå®ããŠããŸãããç§ãããŠããã®ã¯ïŒ
set CC=cl.exe
go build -o next.dll .\main.go
@galichæ®å¿µãªãããMSVCã®çµ±åã«åŸããªããããä»æ¹ããããŸããã
ããšãã°ããã®ã¹ã¬ããã«é¢é£ãããããã¯ã©ãã«ãããŸããïŒ ãã¹ã¿ãŒãä»ã®ã©ããã§ïŒ
@pravicããã§å€æŽãèŠã€ããããšãã§ããŸãïŒ https ïŒ //go-review.googlesource.com/c/go/+/133946/5
@mxplusbãªã³ã¯ã«æè¬ããŸãã/ Werrorã«é¢ããç§ã®ç¹å®ã®åé¡ã¯ããã§è§£æ±ºãããŠããããã§ãã
ããããã€ããŒã¿ç/æ¯æ©/å®å®çã«ãªããç¥ã£ãŠããŸããïŒ
ææ°ã®SDKããã³ãã«ãããŒã«ã«æŽæ°ããããšã¯å¯èœã§ããïŒ SDK10.0.17763.0ã䜿çšããŠããŸãã ããã³ãã«ãããŒã«/ devenvã®ããŒãžã§ã³15.9.28307.222
@cchamplinã€ãã«ãMSVCãæŽæ°ããããšãã§ããŸããã ç§ãä»æã£ãŠããŸã
c:\Users\Alex\dev\go\src>%GOVSVARSPATH%
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
c:\Users\Alex\dev\go\src>cl
Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27030.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
c:\Users\Alex\dev\go\src>
ãã®ããŒãžã§ã³ãããäžåºŠè©ŠããŸãã
commit 6741b7009d1894b5bf535d82ad46f4a379651670 (HEAD)
Author: Caleb Champlin <[email protected]>
Date: Sat Sep 8 00:26:32 2018 -0600
cmd/compile: add support for MSVC toolchain to go build
Allows building with MSVC as an external compiler/linker.
Setting CC=cl.exe inside an MSVC environment will automatically
build cgo executables using MSVC as the external compiler and
linker.
For the builders setting the environment variable GOVSVARSPATH
to the location of a msvsvars.bat file and setting the
environment variable GOTESTMSVC=1 will automatically cause
all.bat to run tests and compiler with both gcc and MSVC.
Updates #20982
Change-Id: I44be1f43aa0d53a688c595bc8336e0364b809ced
ãããŠall.batã¯æ£åžžã«å®äºããŸãã ããããç§ã¯ãããã®èŠåãåãåããŸãã
##### ../misc/cgo/stdio
##### ../misc/cgo/life
##### ../misc/cgo/test
# _/c_/Users/Alex/dev/go/misc/cgo/test
issue28896.cgo2.c
.\issue28896.go(30): warning C4820: '<anonymous-tag>': '4' bytes padding added after data member 'g1'
.\issue28896.go(36): warning C4820: '<anonymous-tag>': '4' bytes padding added after data member 'f2'
# _/c_/Users/Alex/dev/go/misc/cgo/test
cthread_windows.c
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(39) : warning C5045: Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(37) : note: index 'i' range checked by comparison on this line
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(39) : note: feeds call on this line
PASS
scatter = 00007FF670706000
hello from C
sqrt is: 0
ok _/c_/Users/Alex/dev/go/misc/cgo/test 3.534s
# _/c_/Users/Alex/dev/go/misc/cgo/test
issue28896.cgo2.c
.\issue28896.go(30): warning C4820: '<anonymous-tag>': '4' bytes padding added after data member 'g1'
.\issue28896.go(36): warning C4820: '<anonymous-tag>': '4' bytes padding added after data member 'f2'
# _/c_/Users/Alex/dev/go/misc/cgo/test
cthread_windows.c
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(39) : warning C5045: Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(37) : note: index 'i' range checked by comparison on this line
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(39) : note: feeds call on this line
PASS
scatter = 00007FF7DD026000
hello from C
sqrt is: 0
ok _/c_/Users/Alex/dev/go/misc/cgo/test 3.229s
# _/c_/Users/Alex/dev/go/misc/cgo/test
issue28896.cgo2.c
.\issue28896.go(30): warning C4820: '<anonymous-tag>': '4' bytes padding added after data member 'g1'
.\issue28896.go(36): warning C4820: '<anonymous-tag>': '4' bytes padding added after data member 'f2'
# _/c_/Users/Alex/dev/go/misc/cgo/test
cthread_windows.c
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(39) : warning C5045: Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(37) : note: index 'i' range checked by comparison on this line
c:\users\alex\dev\go\misc\cgo\test\cthread_windows.c(39) : note: feeds call on this line
PASS
scatter = 00007FF655CF6000
hello from C
sqrt is: 0
ok _/c_/Users/Alex/dev/go/misc/cgo/test 3.172s
##### ../test/bench/go1
testing: warning: no tests to run
PASS
ok _/c_/Users/Alex/dev/go/test/bench/go1 3.178s
##### ../test
##### API check
+pkg go/build, type Context struct, CompilerType string
+pkg go/build, type Package struct, CgoMSCFLAGS []string
+pkg go/build, type Package struct, CgoMSCPPFLAGS []string
+pkg go/build, type Package struct, CgoMSCXXFLAGS []string
+pkg go/build, type Package struct, CgoMSLDFLAGS []string
+pkg os, method (*File) SyscallConn() (syscall.RawConn, error)
ALL TESTS PASSED
---
Installed Go for windows/amd64 in c:\Users\Alex\dev\go
Installed commands in c:\Users\Alex\dev\go\bin
*** You need to add c:\Users\Alex\dev\go\bin to your PATH.
c:\Users\Alex\dev\go\src>
ãŸãããã¹ãŠã®ãã¹ãã2åå®è¡ããŠããããšã«æ°ã¥ããŸããã
...
##### API check
+pkg go/build, type Context struct, CompilerType string
+pkg go/build, type Package struct, CgoMSCFLAGS []string
+pkg go/build, type Package struct, CgoMSCPPFLAGS []string
+pkg go/build, type Package struct, CgoMSCXXFLAGS []string
+pkg go/build, type Package struct, CgoMSLDFLAGS []string
+pkg os, method (*File) SyscallConn() (syscall.RawConn, error)
ALL TESTS PASSED
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
##### Testing packages.
ok archive/tar 0.256s
ok archive/zip 2.070s
ok bufio (cached)
ok bytes 1.624s
ok compress/bzip2 (cached)
ok compress/flate 1.067s
...
ã©ãããŠïŒ
ã¢ã¬ãã¯ã¹
@alexbrainmanãããã®ãã¹ããç¹ã«ãã®å Žåã¯ã¹ãã¯ã¿ãŒã®èŠåã§ã¯ãèŠåãæå¶ã§ããå¯èœæ§ããããŸãã
2åå®è¡ããããã¹ãã®å Žåããã«ããŒã«å¯ŸããŠãã®ããã«å®è¡ããããšæããŸããgccã³ã³ãã€ã«ã§ãã¹ãã1åå®è¡ããMSVCïŒæå¹ãªå ŽåïŒã§ãã¹ããå床å®è¡ããŠãäž¡æ¹ã®ããŒã«ãã§ãŒã³ã§ã®ã³ã³ãã€ã«ãæ©èœããããšã確èªããŸãã ããã§äœãå¿ èŠãããããªãã®ã§ãMSVCãæå¹ã«ããŠall.batãåŒã³åºããšãMSVCã§ã®ã¿ãã¹ããå®è¡ããããã«å€æŽã§ããŸãããç¥ãããã ããã ãã®å ŽåãMSVCã§ãã«ããããã«ããŒãšã¯å¯Ÿç §çã«ãMSVCã ãã«è¿œå ã®ãã«ããŒãè¿œå ããå¿ èŠããããšæããŸããïŒ
Windowsã§ã¯ãäž¡æ¹ã®ã·ããªãªããã¹ãããããã«ãMinGW-W64ããŒã«ãã§ãŒã³ã䜿çšããŠ1ã€ã®ãã«ããŒãå®è¡ããMSVCããŒã«ãã§ãŒã³ã䜿çšããŠå¥ã®ãã«ããŒãå®è¡ããå¿ èŠãããããšã«åæããŸããã
ãã«ããŒã§ã¯ãã®ããã«è¡ããããšæããŸããgccã³ã³ãã€ã«ã§ãã¹ãã1åå®è¡ãã次ã«MSVCïŒæå¹ãªå ŽåïŒã§ãã¹ããå床å®è¡ããŠãäž¡æ¹ã®ããŒã«ãã§ãŒã³ã§ã®ã³ã³ãã€ã«ãæ©èœããããšã確èªããŸãã
äž¡æ¹ã®ããŒã«ãã§ãŒã³ãååšããå Žåã«æ¢åã®ã¯ãŒã¯ããŒããå£ããªãããšãä¿èšŒãããããã«ããããæšå¥šãããåäœã§ããããšã«åæããŸãã
èŠåã¯ããããã®ãã¹ããç¹ã«ãã®å Žåã¯ã¹ãã¯ã¿ãŒèŠåã§æå¶ãããå¯èœæ§ããããŸãã
Goã³ãã³ãã¯èŠåã衚瀺ããªããããèŠåã¯è¡šç€ºãããŸããã
ãŸãã go env
ã³ãã³ããCC_FOR_CGOå€æ°ã衚瀺ããªãããšã«æ°ã¥ããŸããã CC_FOR_CGOãgoãã«ãã®åäœã«åœ±é¿ãäžããå Žåã¯ãCC_FOR_CGOãä»ã®äººãšäžç·ã«è¡šç€ºããå¿
èŠããããŸãã æ¬åœã«CC_FOR_CGOå€æ°ãå¿
èŠã§ããïŒ ä»ã«äœããããŸãããCC_FOR_CGO = gccã§ããããïŒ
2åå®è¡ããããã¹ãã®å Žåããã«ããŒã«å¯ŸããŠãã®ããã«å®è¡ããããšæããŸããgccã³ã³ãã€ã«ã§ãã¹ãã1åå®è¡ããMSVCïŒæå¹ãªå ŽåïŒã§ãã¹ããå床å®è¡ããŠãäž¡æ¹ã®ããŒã«ãã§ãŒã³ã§ã®ã³ã³ãã€ã«ãæ©èœããããšã確èªããŸãã
å€ãã®ãã¹ãã¯gccã䜿çšããŠããŸããã ããã±ãŒãžãã¹ããçç±ããªã2åå®è¡ãããã®ã¯ã人ãã³ã³ãã¥ãŒã¿ãŒã®æéã®ç¡é§ã§ãã https://github.com/golang/go/issues/20982#issuecomment -480569880ãããããããã«ã archive/zip
ããã±ãŒãžãã¹ãã2åå®è¡ãããŸãã-2åç®ã®å®è¡ã®å¿
èŠã¯ãããŸããã
ãããã©ã®ããã«èª¿æŽãããã¯ããããŸããããrun.batã®go tool dist test
åŒã³åºãã眮ãæããŠãMSVCãã«ãã®ãã¹ãã«å¿
èŠãªãã¹ãã®éžæã ããå®è¡ããå¿
èŠããããŸãã ããšãã°ãç¹å®ã®ãã¹ãã ããéžæããæ¹æ³ã«ã€ããŠã¯ã go tool dist test -h
ã@bradfitzã¯ãdistã³ãã³ãã«MSVCåºæã®ãã¹ããå®è¡ããããã«æ瀺ãããã©ã°ãŸãã¯ç°å¢å€æ°ãäœæã§ããå¯èœæ§ããããŸãã
ããããäžè¬çã«ããªãã®https://go-review.googlesource.com/c/go/+/133946/5ã¯ç§ã®ããã«å®è¡å¯èœãã¡ã€ã«ãæ§ç¯ããŠããŸãã ããšãã°ãgccã䜿çšããŠå®è¡å¯èœãã¡ã€ã«ããã«ãã§ããŸãã
c:\Users\Alex\dev\src\issue\go\20982\hello>type *
hello.c
#include <stdio.h>
extern void hello()
{
printf("Hello World from C");
}
hello.go
package main
/*
extern void hello();
*/
import "C"
import "fmt"
func main() {
fmt.Println("Hello from Go!")
C.hello()
}
c:\Users\Alex\dev\src\issue\go\20982\hello>go build
c:\Users\Alex\dev\src\issue\go\20982\hello>hello
Hello from Go!
Hello World from C
c:\Users\Alex\dev\src\issue\go\20982\hello>
ãã®åŸãMSVCã§å®è¡å¯èœãã¡ã€ã«ããã«ãã§ããŸã
c:\Users\Alex\dev\src\issue\go\20982\hello>%GOVSVARSPATH%
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
c:\Users\Alex\dev\src\issue\go\20982\hello>set CC=cl
c:\Users\Alex\dev\src\issue\go\20982\hello>go build
# issue/go/20982/hello
hello.c
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\stdio.h(948): warning C4710: 'int printf(const char *const ,...)': function not inlined
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\stdio.h(948): note: see declaration of 'printf'
c:\Users\Alex\dev\src\issue\go\20982\hello>hello
Hello from Go!
Hello World from C
c:\Users\Alex\dev\src\issue\go\20982\hello>
ãããã£ãŠãMSVCã䜿çšããŠãã«ãããã«ã¯ããŠãŒã¶ãŒãMSããããã¡ã€ã«ãå®è¡ããŠãã¹ãŠã®ç°å¢å€æ°ãèšå®ããå¿
èŠããããŸãïŒåºåã®GOVSVARSPATHãåç
§ïŒãããã¯æšæºã§ãããGoãšã¯é¢ä¿ãããŸããã ãããŠset CC=cl
ã ååã«åçŽã§ãã
ãã®ã¢ãããŒãã§ç§ãç®ã«ããå¯äžã®åé¡ã¯ãMSVCãŠãŒã¶ãŒããŸã gccãã€ã³ã¹ããŒã«ããå¿ èŠããããšããããšã§ãã gccã¯ããã¹ãŠã®Cã€ã³ã¿ãŒãã§ã€ã¹ãæ€åºããããã«cmd / cgoã«ãã£ãŠäœ¿çšãããŸãããã®éšåã¯ãMSVCã䜿çšããŠå®è£ ãããŠããŸããã cmd / cgoãã©ã®ããã«æ©èœããããç¥ããªã人ã«ãšã£ãŠã¯çããããã«èãããŸããããããäœã§ãããã§ãã
@ianlancetaylorãš@bradfitzã¯ããããåé²ãããã®ã«ãã¹ãŠåççã«èãããŸããïŒ ãããgo1.13ã§å©çšã§ããããã«ããå¿ èŠããããŸããïŒ
MSVCãæ¢ã«ã€ã³ã¹ããŒã«ãããŠãããã«ããŒã¯ããã¹ãŠã®æ°ããã³ãŒãããã¹ãã§ããŸãã ä»ã®ãã«ããŒã¯ãã¹ããã¹ãããããŸãã
ã¢ã¬ãã¯ã¹
gccã¯ããã¹ãŠã®Cã€ã³ã¿ãŒãã§ã€ã¹ãæ€åºããããã«cmd / cgoã«ãã£ãŠäœ¿çšãããŸãããã®éšåã¯ãMSVCã䜿çšããŠå®è£ ãããŠããŸããã
ã©ãããã°ãããå æã§ããŸããïŒ çæ³çã«ã¯ãgccã®èŠä»¶ããªããMSVCã ããå¿ èŠãªå Žåã«æé©ã§ãã
ã©ãããã°ãããå æã§ããŸããïŒ
gccã䜿çšããcmd / cgoã®éšåã¯ãMSVCã䜿çšããããã«æžãçŽãå¿ èŠããããŸãã ããå¯èœãªãã°ã
ã¢ã¬ãã¯ã¹
ãã®æ©èœãæ¬çªç°å¢ã«è¿ãã®ã§ã¯ãªãããšæã£ãŠããŸãããïŒ 1.13ã®ã¿ã°ãä»ããããŠããŠããããåºãã°ããã§ãã æ¡åŒµã³ãŒãã«ãªã³ã¯ãããŠããGoc-archiveãã«ãã䜿çšããŠPythonæ¡åŒµæ©èœããã«ãããããšããŠããŸãããPythonã«ã¯MSVCãå¿ èŠã§ãã
ãã®åé¡ã®ç¶æ³ãããããŸããã ãªãªãŒã¹ãããªãªãŒã¹ãžãšããã¯ãã©ã¯ãŒããããŠããã®ã§ãèšç»å€ã«ç§»åããŸãã 1.14ã«å ¥ããšããã°ãããã
ããã«ã³ã³ãã€ã©ã®èŠä»¶ããã£ãŠããçŸåšã®å®è£ ã次ã®ãªãªãŒã¹ã«çµã¿èŸŒãŸããããšãæãã§ããŸãã å°ãªããšããMSVCã䜿çšããŠå®è¡å¯èœãã¡ã€ã«/ã©ã€ãã©ãªãã³ã³ãã€ã«ããããšãå¯èœã«ãªããŸããããã¯äœããªãããã¯ãŸãã§ãã
ããã«ã³ã³ãã€ã©ã®èŠä»¶ããã£ãŠããçŸåšã®å®è£ ã次ã®ãªãªãŒã¹ã«çµã¿èŸŒãŸããããšãæãã§ããŸãã
ããã¯è¯ããããŒã¿ãå®è£ ã«ãªããšæããŸãã ããã«ããããã°ããã©ãã·ã¥ãããå®è£ ãæçãå§ããããšãã§ããŸãã æ·±å»ãªã¬ãã¥ãŒãåããåã«ãä»ã«äœãããå¿ èŠããããŸããïŒ
ãããã£ãŠãç§ã®èŠ³ç¹ããããããŠãããæåŸã«èŠããšãïŒã6ãæåïŒããæãåºãããšãã§ããããšãããã³ãŒãã¬ãã¥ãŒããã»ã¹ã®ããã«å®äºããå¿ èŠã®ããã¯ãªãŒã³ã¢ããé ç®ã12åã»ã©ãããŸããã å¥ã®ããŒã«ãã§ãŒã³ã§åäœããããã«éåžžã«å°ããªå€æŽãå ããŠåºæ¬çã«ã³ããŒãããäžéšã®ãã¹ããéè€æé€ããã«ã¯ãè¿œå ã®äœæ¥ãå¿ èŠã«ãªãå ŽåããããŸãã ç¹å®ã®msvcèŠåã確èªããŠãªãã«ããå¿ èŠããããŸãã
äž»ãªæªè§£æ±ºã®åé¡ã¯æ¬¡ã®ãšããã§ãã
gccãªãã§ååæãè¡ãããšã¯ã§ããŸãããããã«å¯Ÿããç°¡åãªããŸãã¯å³æã®è§£æ±ºçã¯ãããŸããã
ã»ããã¢ãããå®äºãããã«ããŒã«ãšã£ãŠãã¹ãŠãã©ã®ããã«æ©èœãããã確èªããŸãã
éå»6ãæéã«ã³ã³ãã€ã©ãšãªã³ã«ãŒã«ããªãéèŠãªå€æŽãå ããããããã«å¯ŸããŠè¡ãããŠããçŸåšã®äœæ¥ã«æ·±å»ãªåœ±é¿ãäžããå¯èœæ§ããããšæããŸãããããã確èªããããšã¯ã§ããŸããã§ããã Goã®ã³ã³ãã€ã©/ãªã³ã«ãŒ/ããŒã«ãã§ãŒã³ã®ããã²ãŒãã«é¢ããè€éããšé«ãåŠç¿æ²ç·ã®ããã«ãå€æŽããã®äžé£ã®äœæ¥ã«äžãã圱é¿ãææ¡ããã®ã«ååãªé床ã«éããã«ã¯ãããªãã®æéããããå ŽåããããŸãã
è€éãªæ°å€åã¯ãµããŒããããŠããŸããã MSCVã®Clibã¯åã«äºææ§ããããŸããã ãããC ++ã§ã·ã ããæ¹æ³ã¯ãããããããšæããŸãããMSVCããŒã«ãã§ãŒã³ã«ç²ŸéããŠããMSã®èª°ãããã£ã€ã ã鳎ããããšãã§ãããã©ããã¯ããããŸããã
æ®å¿µãªããã人çãä»ã®ãããžã§ã¯ãã¯ãç§ãããã«ãã£ãšæéãè²»ããã®ãããªã倧ãã劚ããŠããŸãããç§ã¯ä»åŸæ°é±éã§ããã«æéãè²»ããã€ããã§ãã
@manbearianãã®åé¡ã¯ãgolangã«MSVCãµããŒããè¿œå ããããšã«é¢ãããã®ã§ãã MSVCããŒã ã®èª°ãMSVCã®è³ªåã«ã€ããŠçžè«ããã®ãè¯ãã§ããããïŒ
@ kesmit13ããã³@mxplusb
ãã®
https://go-review.googlesource.com/c/go/+/133946/5
åäœãã@cchamplinææ°ã®ã³ãŒãã§ãã
ã³ãŒãã«é¢ããç§ã®çŸåšã®æžå¿µã¯ãããã䜿çšããæ¹æ³ãäžæ確ã§ãããšããããšã§ãã ã©ã®ã³ãã³ããå®è¡ããŸããïŒ ç°å¢ãã©ã®ããã«èšå®ããå¿ èŠããããŸããïŒ
次ã®ã¹ãããã¯ã誰ãããã®ã³ãŒããè©ŠããŠäœ¿çšããå®éã«äœ¿çšã§ãããã©ããã確èªããããšã ãšæããŸãã ãããæ©èœããå Žåã¯ãä»ã®äººãã³ãŒãã䜿çšã§ããããã«ãæé ãææžåããå¿ èŠããããŸãã å€åããã¯è€éãããããæ©èœããŸããã ããã«å¿ããŠã³ãŒãã調æŽããå¿ èŠããããŸãã
ã³ãŒãã®çŸåšã®ç¶æ ã«æºè¶³ãããããã¹ã¿ãŒã«ãªããŒã¹ããå¿ èŠããããŸãã å€æŽã調æŽãããããŸããŸãªãã¡ã€ã«ãå€ãããããããªããŒã¹ããã®ã¯ç°¡åã§ã¯ãããŸããã å€æŽã調æŽããŠå€æŽãå°ãªãããããšãã§ããã®ã§ããªããŒã¹ãç°¡åã«ãªããŸãã
ã¢ã¬ãã¯ã¹
@mxplusb @ kesmit13çŸåšã®å®è£ ã¯ãã¹ã¿ãŒã«å¯ŸããŠãªããŒã¹ãããŠãããããã§èŠã€ããããšãã§ããŸãïŒ https ïŒ//go-review.googlesource.com/c/go/+/133946/6
@alexbrainman
ã³ãŒãã«é¢ããç§ã®çŸåšã®æžå¿µã¯ãããã䜿çšããæ¹æ³ãäžæ確ã§ãããšããããšã§ãã ã©ã®ã³ãã³ããå®è¡ããŸããïŒ ç°å¢ãã©ã®ããã«èšå®ããå¿ èŠããããŸããïŒ
ããã®äœ¿çšæ¹æ³ã«é¢ããããã¥ã¡ã³ããè¿œå ããå¿ èŠãããããšã«åæããŸãã ã©ãã«çœ®ãã°ããã®ãããããããŸããããèããããã°æããŠãã ããã Idkã¯ãMSVCãä»ããŠãã«ã/å®è¡ããããã«cmd / goããã¥ã¡ã³ãã®äžã«é 眮ããå¿ èŠãããã®ãââãCGOããã¥ã¡ã³ãã®äžã«é 眮ããå¿ èŠãããã®ãââããããã¯å®å šã«å¥ã®å Žæã«é 眮ããå¿ èŠãããã®ã§ããããã
å€ãã®ãã¹ãã¯gccã䜿çšããŠããŸããã ããã±ãŒãžãã¹ããçç±ããªã2åå®è¡ãããã®ã¯ã人ãã³ã³ãã¥ãŒã¿ãŒã®æéã®ç¡é§ã§ãã ïŒ20982ïŒã³ã¡ã³ãïŒãããããããã«ãã¢ãŒã«ã€ã/ zipããã±ãŒãžã®ãã¹ãã¯2åå®è¡ãããŸãã-2åç®ã®å®è¡ã®å¿ èŠã¯ãªããšæããŸãã
ãããã©ã®ããã«èª¿æŽãããã¯ããããŸããããMSVCãã«ãããã¹ãããããã«å¿ èŠãªãã¹ãã®éžæã ããè¡ãããã«ãrun.batã®go tool disttestã®åŒã³åºãã眮ãæããå¿ èŠããããããããŸããã ããšãã°ãç¹å®ã®ãã¹ãã ããéžæããæ¹æ³ã«ã€ããŠã¯ãgo tool dist test-hãåç §ããŠãã ããã @bradfitzã¯ãdistã³ãã³ãã«MSVCåºæã®ãã¹ããå®è¡ããããã«æ瀺ãããã©ã°ãŸãã¯ç°å¢å€æ°ãäœæã§ããå¯èœæ§ããããŸãã
ãã®å€æŽã«ã¯ãMSVCã®åŠçãå®è¡ããŠããããšãéç¥ããããã«distã«è¿œå ãããç°å¢å€æ°ãGO_TEST_TESTINGMSVCãããã§ã«å«ãŸããŠãããšæããŸãã ç§ãããããããªãã®ã¯ããã¹ãŠã®ãã¹ãã2åå®è¡ããªãã£ãå Žåã«ãMSVCã ãã圱é¿ãäžããå¯èœæ§ã®ãããã®ã«å®è¡ããããã¹ããã©ã®ããã«ãã£ã«ã¿ãªã³ã°ãããã§ãã æœåšçã«ã¯CGOé¢é£ã®ãã¹ãã«éå®ããã ãã§ãããCGOãã¹ãã¯ããããšããã«ãããšæããŸãããdistã«ããããé€å€ããã¡ã«ããºã ããããã©ããããããŸããã
ã©ãã«çœ®ãã°ããã®ãããããããŸããããèããããã°æããŠãã ããã
ããã¥ã¡ã³ããæŽæ°ããåã«ãMSVCã䜿çšããŠCgoã³ãŒãããã«ãããæ¹æ³ãããã§èª¬æããå¿ èŠããããšæããŸãã @mxplusbãš@ kesmit13ã®å Žåã¯ãå€æŽãè©Šãããšãã§ããŸãã
ããšãã°ãgccã䜿çšããŠCgoã³ãŒãããã«ãããã«ã¯ã
%GOROOT%\src
ãã£ã¬ã¯ããªããmake.batãå®è¡ããŠæåã«ãã«ãããŸãgo build
ããã³go install
ã³ãã³ãã䜿çšããMSVCã§åãããšãããã«ã¯ã©ãããã°ããã§ããïŒ
ç§ãããããããªãã®ã¯ããã¹ãŠã®ãã¹ãã2åå®è¡ããªãã£ãå Žåã«ãMSVCã ãã圱é¿ãäžããå¯èœæ§ã®ãããã®ã«å®è¡ããããã¹ããã©ã®ããã«ãã£ã«ã¿ãªã³ã°ãããã§ãã æœåšçã«ã¯CGOé¢é£ã®ãã¹ãã«éå®ããã ãã§ãããCGOãã¹ãã¯ããããšããã«ãããšæããŸãããdistã«ããããé€å€ããã¡ã«ããºã ããããã©ããããããŸããã
ïŒ GOROOTïŒ \ misc \ cgoãã£ã¬ã¯ããªããå§ããŸãã ããã§æ§ç¯ã§ãããœãŒã¹ãäœã§ãããæ§ç¯ããå¿ èŠããããŸãã ãã以äžã®ãã®ã¯ããªã次第ã§ãã
ã¢ã¬ãã¯ã¹
@cchamplinãããé ããŠç³ãèš³ãããŸããããä»é±ã¯ãã¹ãããŠã©ããªããããç¥ããããããã«æåãå°œãããŸãã
ããã«ã¡ã¯ãããŒãã£ãŒã«é ããŠç³ãèš³ãããŸãã... MSVCã®æ©èœã«é¢ãã質åã«çããããã§ãã人ã«æ¡å ãããã§ããŸãã äŒè©±ãèªã¿éããŸããããæ®å¿µãªãããMSVCã«ãªãå Žåãšãªãå Žåãããå¿ èŠãªGCCæ©èœãç解ããã®ã«ååãªç¥èããããŸããã
ããã«ã¡ã¯ãã©ãŒã¯ã¹ã
ãã®æ©èœã¯Go1.14ã§ãªãªãŒã¹ãããŸãããïŒ
ãªãªãŒã¹ãããå Žåã¯ãå©çšå¯èœãªããã¥ã¡ã³ããå
±æããŠå©çšããŠãã ããã
ãŸã ãªãªãŒã¹ãããŠããªãå Žåããã€ãªãªãŒã¹ããããã«ã€ããŠäœãèãã¯ãããŸããïŒ
MSVCã®ãµããŒããç±å¿ã«åŸ
ã£ãŠããŸãã
åãã£ãŠæè¬ããŸã ïŒïŒ
ããã«ã¡ã¯ã誰ãç§ã®è©³çŽ°æ å ±ã®èŠæ±ã«å¿çããªãã£ãã®ã§ãäœãå¿ èŠãããããŸããã 誰ããç§ã«èšå ¥ããŠããããŸããïŒ
æ®å¿µãªããã誰ãããã®åé¡ã«ç©æ¥µçã«åãçµãã§ãããã©ããã¯ããããŸããã
ããã«ã¡ã¯ã誰ãç§ã®è©³çŽ°æ å ±ã®èŠæ±ã«å¿çããŸããã§ãã...
ããã«ã¡ã¯@manbearian
ããã¯ã©ã®ãªã¯ãšã¹ãã§ããïŒ ã©ã®ãããªæ å ±ãå¿ èŠã§ããïŒ
ã¢ã¬ãã¯ã¹
ç§ã¯ãã®ã¹ã¬ããã®ååã§æ å ±ã®ããã«ã¿ã°ä»ããããŸãããã人ã ãäœãæ¢ããŠããã®ããããããå©ããããšãã§ããŸããã§ããã å©ããå¿ èŠãªããªããããã¯çŽ æŽãããããšã§ãã æããŠãã ããã
æããŠãã ããã
@manbearian
ããªãã®ç³ãåºãããããšãã 誰ãããªãã«ã¿ã°ãä»ããã®ãããããŸããã ããã§ãå©ããå¿ èŠãªå Žåã¯ãå床ã¿ã°ãä»ããŸãã
ã¢ã¬ãã¯ã¹
ãŸã ãªãªãŒã¹ãããŠããªãå Žåããã€ãªãªãŒã¹ããããã«ã€ããŠäœãèãã¯ãããŸããïŒ
MSVCã®ãµããŒããç±å¿ã«åŸ ã£ãŠããŸãã
@ dhinesherode91
ã³ãŒãã¯ããã«ãããå®å šã§ãã ãããæ¬åœã«åŠšããŠããã®ã¯ãå€æŽããã¹ãããŠãã£ãŒãããã¯ãæäŸããé©åã«ã¬ãã¥ãŒããŠæ¿èªã§ããããã«ããããšã ãã ãšæããŸãã ããããç§ã¯çŸåšã®ãã¹ã¿ãŒã®äžã«å€æŽããªããŒã¹ããããšãèºèºããŠããŸãã ç§ã¯ããã5ã6åå®è¡ããŸããããéåžžã«æéããããããã¹ãããã£ãŒãããã¯ãåŸãããŸããã è¿œå ã®é¢ä¿è ãããã®ãã¹ãã«åå ããææããªãéããåé¡ã¯æ°Žäžã§æ»ãã§ããå¯èœæ§ããããŸãã
è¿œå ã®é¢ä¿è ãããã®ãã¹ãã«åå ããææããªãéããåé¡ã¯æ°Žäžã§æ»ãã§ããå¯èœæ§ããããŸãã
@cchamplinã¯ãå€æŽããã¹ã/ãããã°ããããã«ç§ãé Œãã«ããŠããŸãã ããŒã«ãã§ãŒã³ã䜿çšããçµéšã¯ãããŸããããã³ãããã確èªããŸãããã³ãããã¯éåžžã«ããæ§æãããææžåãããŠããããã§ãã
@cchamplinå®è£
éšåãå®äºãããšèããŠ
ç§ã¯ãã¹ãã®éšåã«åå ããããšã«èå³ããããŸãããç§ã¯GoLangã®åå¿è
ã§ãããWindows APIïŒæ°é±éåã«éå§ïŒã®åªããåŠç¿è
ã§ããããŸãã å€ãã®å
¬åŒãªãœãŒã¹ãå©çšã§ããããã«èŠããã®ã§ãMS C ++ã§WindowsAPIã䜿çšããããšãèšç»ããŠããŸããã ãããããã®åŸããã«ããã©ãããã©ãŒã ã·ã¹ãã ããã°ã©ãã³ã°ã«äœ¿çšã§ããèšèªïŒã·ã¹ãã ããã°ã©ãã³ã°çšïŒãæ¢ãå§ããGoLangã«æéãåããŸããã åžžã«ç§ã®åŽããã®è²¢ç®ã®æºåãã§ããŠãããå€ãã®æå°ãå¿
èŠã§ãã
@cchamplinãªããŒã¹ããå Žåã¯ããã®äžã«æ§ç¯ããŠã¿ãŸãã äœæ¥äžã®ããã€ãã®ãããžã§ã¯ãããmingw64èŠä»¶ãåé€ããããšæããŸãã ç§ã®ãã«ãããŒã«ã¯ãã¹ãŠMSVCçšã«ã»ããã¢ãããããŠããã®ã§ããããã䜿çšãã以å€ã«äœãããå¿ èŠã¯ãããŸããã
@cchamplinãã
@ericlagergren
@cchamplinãã
ç§ãç解ããŠãããã©ããã¯ããããŸãããã httpsïŒ //go-review.googlesource.com/c/go/+/133946/6ã§ãé¢é£ããã³ãããã®å€ãã¯ãããçšåºŠã®å®¹éã§Goã®cgoéšåã«çŽæ¥è§ŠããŠããŸãã
@ccahoonããããŸãããç§ã¯ããããéããã«éããããŸããã cgoããŒã«ãæŽæ°ãããŠããªãå Žåã¯ãæŽæ°ããããšãææ¡ããŸããã
@ericlagergren
äœæ¥äžã®ããã€ãã®ãããžã§ã¯ãããmingw64èŠä»¶ãåé€ããã
åèãŸã§ã«ã NS
https://go-review.googlesource.com/c/go/+/133946/6
å€æŽãè¡ãã«ã¯ãMingwãå¿ èŠã§ãã @cchamplinã®å€æŽã䜿çšããã«ã¯ãMingwããŒã«ãšMSVCããŒã«ã®äž¡æ¹ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ã¢ã¬ãã¯ã¹
@cchamplin ããªãMingwããŸã å¿ èŠãªã®ã§ããïŒ ãã®äŸåé¢ä¿ãåé€ããã«ã¯äœãå¿ èŠã§ããïŒ
@alexbrainmanç§ã¯ééã£ãŠè©±ããŸããã éMSVCãã«ãããã»ã¹ã«ã¯autotoolsãå¿ èŠãªãããçŸæç¹ã§ã¯MSYS2ïŒmingw64ãå«ãïŒã䜿çšããå¿ èŠããããŸãã ãããåé€ãããšçŽ æŽãããã ããã ãããã @ cglongãèšã£ãããã«ããªãããã«ãmingw64ãå¿ èŠã«ãªãã®ãããããŸããã
@ericlagergren @cglong CGOã¯ãã³ã³ãã€ã«ã«äœ¿çšãããŠããCã³ãŒãã«é¢ããåæ å ±ãåéããŠå©çšã§ããããã«ããå¿ èŠããããŸãã GCCã«ã¯ãã¿ã€ãããŒã¿ã䟿å©ã«è§£æå¯èœãªåœ¢åŒã§åºåãããã©ã°ããããŸãã ç§ã®ç¥ãéããMSVCã«ã¯åãæ å ±ãæäŸããæ©èœããããŸããã goã§ããŒã«ãæ§ç¯ããã«ã¯ãCããã³C ++ã³ãŒããlex /解æããããã®ã³ãŒãã ãã§ãªããããªããã»ããµãã£ã¬ã¯ãã£ããç解ããŠè©äŸ¡ããããã®ã³ãŒããå¿ èŠã«ãªããŸãã Goã§ãã®ãããªãã®ãæ§ç¯ããããšã¯ããªã倧ããªä»äºã«ãªãã§ãããã ããããã©ããã«ãã§ã«å©çšå¯èœãªã©ã€ãã©ãªããããŸããããããæ¡çšããæ¹æ³ãç解ããããšã¯ã§ããŸããïŒ
@cchamplin gotchaããããç§ãèãããã®ã§ãã libclangãcznic / ccã®ãããªãµãŒãããŒãã£ã®ã©ã€ãã©ãªãç¥ã£ãŠããŸãã ãããæ®å¿µãªãããlibclangã¯å·šå€§ã§ãããcznic / ccã¯WindowsãŸãã¯macOSã§ãã¹ããããŠããŸããã PDBã¯ååãªæ å ±ãæäŸããŠããŸãããïŒ
CGOã¯ãã³ã³ãã€ã«ã«äœ¿çšãããŠããCã³ãŒãã«é¢ããã¿ã€ãæ å ±ãåéããŠå©çšã§ããããã«ããå¿ èŠããããŸãã GCCã«ã¯ãã¿ã€ãããŒã¿ã䟿å©ã«è§£æå¯èœãªåœ¢åŒã§åºåãããã©ã°ããããŸãã ç§ã®ç¥ãéããMSVCã«ã¯åãæ å ±ãæäŸããæ©èœããããŸããã
ãããã@manbearianã¯ããã«ããã€ãã®ãã€ã³ã¿ãæäŸã§ãããããããŸãããïŒ
GCCãåºååããŒã¿ãç¹å¥ãªåœ¢åŒã§åºåãããšã¯èšããŸããã ãããã¬ãŒåãã®DWARFãããã°ããŒã¿ãåºåããcgoã¯debug / dwarfããã±ãŒãžã䜿çšããŠãã®ããŒã¿ãèªã¿åããŸãã MSVCã«ã¯ãããããããã°åœ¢åŒããããŸãã ãã®åœ¢åŒãã©ããã«ææžåãããŠããå Žåã¯ãDWARFããŒã¿ãšåãããã«cgoã䜿çšããŠèªã¿åãããšãã§ããŸãã
@ianlancetaylorMSVCã¯PDBãã¡ã€ã«ãhttps://github.com/Microsoft/microsoft-pdbãåç §ããŠ
FWIWãMSVCã®ãããã°åºåãèªãããšã¯ã httpsïŒ //github.com/golang/go/issues/20982#issuecomment-648462003ã§cgoããŒã«ã«ã€ããŠèšåãããšãã«ç§ã話ããŠããããšã§ã
GCCãåºååããŒã¿ãç¹å¥ãªåœ¢åŒã§åºåãããšã¯èšããŸããã ãããã¬ãŒåãã®DWARFãããã°ããŒã¿ãåºåããcgoã¯debug / dwarfããã±ãŒãžã䜿çšããŠãã®ããŒã¿ãèªã¿åããŸãã MSVCã«ã¯ãããããããã°åœ¢åŒããããŸãã ãã®åœ¢åŒãã©ããã«ææžåãããŠããå Žåã¯ãDWARFããŒã¿ãšåãããã«cgoã䜿çšããŠèªã¿åãããšãã§ããŸãã
@ericlagergren @ianlancetaylor
ãããã£ãŠããã®å€§éšåã§ããDWARFããŒã¿ãå¿
èŠã§ãã ãã ããçè«çã«ã¯PDBããŒã¿ããåãæ
å ±ãååŸã§ããŸãã
ãã ããç§ãå ·äœçã«èšåããã®ã¯ãGCCãçæããDWARFããŒã¿ã ãã§ãªããååŠçãè¡ãããåŸã«ãã¹ãŠã®#defineãåºåããgcc -E-dMã®åºåã§ããã PDBèªäœãåãæ å ±ãæäŸããå¯èœæ§ããããŸã...ç§ãçã£ãŠããã®ã¯ãå®éã«ã³ã³ãã€ã«ããªããŠããMSVCã«ãããã°æ å ±/ã¿ã€ãæ å ±ãä»»æã®å®¹éã§ãã³ããããããšãã§ãããã©ããã§ããã³ãŒãã çŸåšãCGOã¯GCCã§ãŸãã«ãããè¡ã£ãŠããŸãã
/ EP / d1PPã¯ãã¡ã¢ãªãã-E-dMã«äŒŒããã®ãåºåããã¯ãã§ãã
/ EP / d1PPã¯ãã¡ã¢ãªãã-E-dMã«äŒŒããã®ãåºåããã¯ãã§ãã
ãããããªããããã¯çŽ æŽãããããšã ãšæããŸããã/ d1PPã¯ææžåãããŠããªããã©ã°ã ãšæããŸããïŒ ä»ãŸã§èŠãããšããããŸããã ããã¯ãåçã®ã¿ã€ãæ å ±ãåãã£ãŠååŸããããšãæ®ãã ãã§ãã
@cchamplinãããããã¯ææžåãããŠã
誰ããMSVCãµããŒãã®çŸåšã®ç¶æ ã®ç°¡åãªèŠçŽãæããŠããããŸããïŒ ç§ã¯ãã®äœã¬ãã«ã®ã³ã³ãã€ã©ãŒã®ãã®ãã¹ãŠãããŸãç解ããŠããŸããã CïŒ/ UWPãã䜿çšãããgoã©ã€ãã©ãªããããšããã ãã§ããããã¯ãgobuildãšbuildmodec-sharedã§ãã§ã«æ©èœããŠããŸãã ãã ããgoããçæãããDLLã«ã¯ãMSVCããŒã«ãã§ãŒã³ã§ã®ã¿èšå®ã§ããã³ã³ãã€ã©/ãªã³ã«ãŒãã©ã°ããªãããããã®ã¢ããªã¯Windowsã¹ãã¢ã§åãå ¥ããããŸããã
ã ããïŒã©ãããã°ãããããã§ãã¹ãã§ããŸããïŒ ã¢ããã€ã¹ãããã ããã°å¹žãã§ãã ããããšãããããŸããïŒ
goããçæãããDLLããMSVCããŒã«ãã§ãŒã³ã«ãã£ãŠã®ã¿èšå®ã§ããã³ã³ãã€ã©/ãªã³ã«ãŒãã©ã°ãèŠéããŠããããããã®ã¢ããªã¯Windowsã¹ãã¢ã«åãå ¥ããããŸããã
@TopperDEL Windows Storeã¯ãã©ã®ã³ã³ãã€ã©ãã©ã°ãæ¬ èœããŠããããæããŠãããŸããïŒ mingw-64ããããããµããŒãããŠããå Žåã¯ãdllããã«ããããšãã«ãé©åãªãã©ã°ãæå®ããŠ-extldflags
ããã€ã§ã䜿çšã§ããŸãã
@qmuntalã¯ããããã§ãïŒ
ãã¢ããªããªã³ã¯ãããšãã«ãå¿
èŠãªãªã³ã«ãŒãªãã·ã§ã³ïŒSAFESEHãDYNAMICBASEãNXCOMPATãããã³APPCONTAINERïŒãé©çšããŸããã
ç§ã¯ãã§ã«è©ŠããŸããgo build -ldflags="-s -w '-extldflags=-Wl,--dynamicbase,--high-entropy-va'" -o storj_uplink.dll -buildmode c-shared
ããããããã¯ã¹ãã¢ã®æåºã«é¢ããŠäœãå€ãããŸããã§ããã ãããŠãç§ã®ç解ã§ã¯ãå°ãªããšãSAFESEHã¯MSVCåºæã®ãã®ã§ãããïŒ
ãã¢ããªããªã³ã¯ãããšãã«ãå¿ èŠãªãªã³ã«ãŒãªãã·ã§ã³ïŒSAFESEHãDYNAMICBASEãNXCOMPATãããã³APPCONTAINERïŒãé©çšããŸããã
Mingw-w64ã§SAFESEHãã©ã°ãŸãã¯APPCONTAINERãã©ã°ãæå¹ã«ããç°¡åãªæ¹æ³ã¯ããããŸãããããããããã®ãããžã§ã¯ãhttps://github.com/status-im/mingw-windows10-uwpã§ã¬ã€ãã³ã¹ãåŸãããšãã§ããŸãã
äžæ¹ãDYNAMICBASEãšNXCOMPATã¯go 1.16ïŒïŒ41421ãåç
§ïŒã§ããã©ã«ãã§æå¹ã«ãªããŸãããåè¿°ã®ããã«-extldflags
ãã§ã«äœ¿çšã§ããŸããå®éãäžéšã®ãããžã§ã¯ãã§ã¯ãããè¡ã£ãŠããŸãã
@qmuntalããããšãïŒ ããã§ãå°ãªããšãäžèšã®ç§ã®extldflagsã¯æ£ããã¯ãã§ããïŒ
Windows10-uwpã®mingwãèŠãŠã¿ãŸãããã
æãåèã«ãªãã³ã¡ã³ã
ãã®ã¹ã¬ããã®äžéšãããMSVCã®åé¡ãæŽçãããŠããããã«èŠããŸãã ãã ããåé¡ãçºçããå Žåã¯ãMSVCããŒã ã«æå±ããŠããŸãã githubãŸãã¯é»åã¡ãŒã«ïŒ[email protected]ïŒã§ç§ã«pingããŠãã ããã