Go: cmd/go: cgo ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์—์„œ ๋ˆ„๋ฝ๋œ ์˜ต์…˜

์— ๋งŒ๋“  2018๋…„ 02์›” 08์ผ  ยท  138์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: golang/go

cmd/go์— ๋Œ€ํ•œ ์ตœ๊ทผ ๋ณด์•ˆ ํŒจ์น˜(#23672)์—๋Š” cgo์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์—†๋Š” ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นŒ๋“œ์— ์‹คํŒจํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋ˆ„๋ฝ๋œ ๋ชจ๋“  ์˜ต์…˜ ๋ชฉ๋ก์„ ์ˆ˜์ง‘ํ•˜์—ฌ ๋‹จ์ผ CL์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FrozenDueToAge release-blocker

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ชจ๋“  ์ปดํŒŒ์ผ๋Ÿฌ(๋ฐ ๋ง์ปค ๋“ฑ) ์˜ต์…˜์ด ์ด์œ ๊ฐ€ ์žˆ๊ณ  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ํŠน๋ณ„ํžˆ ์œ„ํ—˜ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ์˜ต์…˜์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋ถ„๋ช…ํžˆ ์ˆ˜๋ฐฑ ๊ฐœ๊ฐ€ ์žˆ๊ณ  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ๋Š” ์žฌ๋ฏธ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ๊ฒฐ์ •๋œ ๊ฒฝ๋กœ๋ผ๋ฉด ...

์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋…ผ์˜๋˜์—ˆ์ง€๋งŒ ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค์—์„œ ๋†€๋ผ์šด ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ๋ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ผ๊ฐ”๊ณ  1.10์— ๋Œ€ํ•ด ํ™œ์„ฑํ™”๋œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์‹œ์Šคํ…œ์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. RC ๋™์•ˆ. ์ถ”๊ฐ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์ผ๋ถ€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ๊ทธ๋‹ค์ง€ ์‹ค์šฉ์ ์ด์ง€ ์•Š์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์‚ฌ๋žŒ๋“ค์ด 1.9.3์œผ๋กœ ๋˜๋Œ์•„๊ฐ€ ์™„์ „ํžˆ ๋ณดํ˜ธ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ด€์ฐฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ „์ ์œผ๋กœ ์—ญํšจ๊ณผ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์™€์ผ๋“œ์นด๋“œ์™€ ์ •๊ทœ์‹์œผ๋กœ ๊ฐ€๋“ ์ฐฌ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ์œ„์žฅ๋œ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๊ฐ€ ๋˜๋Š” ์‹œ์ ์€?

๋ชจ๋“  138 ๋Œ“๊ธ€

23737 ์€ pkg-config -libs ์˜ํ•ด ์ƒ์„ฑ๋œ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐ CGO_CFLAGS_ALLOW ์— ๋Œ€ํ•ด ๊ฒ€์‚ฌ๋˜๊ณ  ์žˆ์ง€๋งŒ ๋Œ€์‹  ๋ง์ปค ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐ CGO_LDFLAGS_ALLOW ์— ๋Œ€ํ•ด ๊ฒ€์‚ฌ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” CL์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://golang.org/cl/92755.

๋ง์ปค ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋Š” ์ด๋ฏธ .o , .so ๋“ฑ์˜ ํŒŒ์ผ์„ ์ˆ˜๋ฝํ•˜๋ฏ€๋กœ .a ํŒŒ์ผ์„ ์ˆ˜๋ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” CL์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://golang.org/cl/92855. #23739 ์ž…๋‹ˆ๋‹ค.

#23672์— ๋Œ€ํ•œ ์ฃผ์„์€ ๋‹ค์Œ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

-fno-rtti
-fpermissive

๋‹ค์Œ ๋ง์ปค ์˜ต์…˜:

-Wl,-framework
-Wl,--no-as-needed

23742๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ -fmodules ์ถ”๊ฐ€๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. clang ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์—ฌ๋Ÿฌ -fmodules ์˜ต์…˜์„ ์ง€์›ํ•˜์ง€๋งŒ ๋ชจ๋‘ ์•ˆ์ „ํ•œ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ -fmodules-cache-path ๋ฐ -fmodules-user-build-path ๋Š” clang์ด ๋ชจ๋“ˆ์„ ์ฝ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ๊ฒฝ๋กœ ์ง€์ •์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ, ์ด๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ปดํŒŒ์ผ ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

23743์€ ๋ง์ปค ์˜ต์…˜ -Wl,--no-as-needed ์ถ”๊ฐ€๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ CL์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://golang.org/cl/92795.

23744๋Š” ๋‹ค์Œ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

-finput-charset=UTF-8
--std=c99
-pedantic-errors

๋‹จ์ผ ๋Œ€์‹œ ๋˜๋Š” ์ด์ค‘ ๋Œ€์‹œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ๋ง์ปค ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋Š์Šจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง๊ต์„ฑ์˜ ๊ฒฝ์šฐ: -framework ์˜ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์˜ต์…˜์ด ์ด๋ฏธ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ๊ทธ๊ฒƒ์ด ์–ด๋–ค ์˜ต์…˜์ธ์ง€ ์žŠ์–ด ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. (์ œ๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” /Library/Frameworks ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Apple์€ ์•ฑ๋ณ„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒ€์ƒ‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

๋˜ํ•œ -as-needed ๋Š” ์ฒ˜์Œ์— cgo์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๊นŒ? ์ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ("gcc as-needed"์— ๋Œ€ํ•ด ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ์ž„)์€ ์ด๊ฒƒ์ด ์œ„์น˜ ์ธ์ˆ˜๋ผ๊ณ  ๋งํ•˜์ง€๋งŒ cgo๊ฐ€ ๊ฒฐ๊ณผ ๋ช…๋ น์ค„์—์„œ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ๋ณด์žฅํ•˜๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@andlabs ์“ฐ๊ธฐ ์ข‹์•„์š”

#cgo LDFLAGS: -Wl,--as-needed -loptlib -WL,--no-as-needed

์–ด์จŒ๋“  ์ด ๋ฌธ์ œ์˜ ์ฃผ์ œ๋Š” go get ์—์„œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•œ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•  ๋•Œ:

#cgo !windows pkg-config: --static ${SRCDIR}/vendor/libgit2/build/libgit2.pc

๋‹ค์Œ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ปดํŒŒ์ผ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

invalid pkg-config package name: --static

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด(go 1.9.4์šฉ) pkg-config ์ธ์ˆ˜๋ฅผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

@rgburke pkg-config ์ถœ๋ ฅ์€ ๋‹ค๋ฅธ ์ถœ๋ ฅ๊ณผ ๋™์ผํ•œ FLAGS_ALLOW ๋ณ€์ˆ˜๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜ํƒ€๋‚˜ pkg-config -libs ๊ฒ€์‚ฌ CGO_CFLAGS_ALLOW ๊ฐ€ ํ™•์ธํ•œ๋‹ค๊ณ  ํ•  ๋•Œ CGO_LDFLAGS_ALLOW .

์šฐ๋ฆฌ๋Š” ํ์‡„ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์€ ์ˆ˜์˜ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

#cgo LDFLAGS:/path/to/one/liblibrary1.a
#cgo LDFLAGS:/path/to/two/liblibrary2.a
etc.

์ด๊ฒƒ์€ ๋ฌผ๋ก  ์ง€๊ธˆ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

#cgo LDFLAGS:-L/path/to/one -llibrary1
#cgo LDFLAGS:-L/path/to/two -llibrary2

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์ค‘ ์ผ๋ถ€์—๋Š” ๋ง์ปค๋ฅผ ํ˜ผ๋™์‹œํ‚ค๋Š” ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ https://go-review.googlesource.com/c/go/+/92855 ์˜ ํ—ˆ์šฉ๋œ "์ด๋ฆ„" ๋ชฉ๋ก์— '/'๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ 91ํ–‰์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

re(`[a-zA-Z0-9_\/].*\.(o|obj|dll|dylib|so|a)`), // direct linker inputs: x.o or libfoo.so (but not -foo.o or @foo.o)

ํ›„์ž์˜ ์˜ต์…˜์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋งŒ ๋ณด์•ˆ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•ด์„œ๋Š” ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@mirtchovski์— ๋Œ€ํ•œ ํŒจ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(๋ฌธ์ œ๋Š” .a ๊ฐ€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์—†์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐœ์ฒด ํŒŒ์ผ ํ˜•์‹์€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค)

.a๋Š” ์ด์ œ (ํ•ด๋‹น ํŒจ์น˜ ์ดํ›„) ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ์œผ๋ฏ€๋กœ 'libsomething.a'๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ '/path/to/libsomething.a'๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ianlancetaylor @rgburke ์‹ค์ œ๋กœ --static ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ #23737๋กœ ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค. --static ๊ทธ๊ฒƒ์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ _before_ ์œ ํšจํ•œ ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋ถ€ pkg-config ์—ฌ๊ธฐ https://github.com/golang/go/blob/104445e3140f4468839db49a25cb0182f7923174/src/ cmd/go/internal/work/exec.go#L939 -L940.

๋‚ด๋ถ€์ ์œผ๋กœ ๋น ๋ฅธ ์ˆ˜์ •์€ PKG_CONFIG๊ฐ€ ๋‹จ์ˆœํžˆ pkg-config --static "$@" ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

@jeddenlea - ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

-msse ์™€ -msse4.2 .

cgo LDFLAGS์˜ "${SRCDIR}/file.o"๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ง์ปค ์ž…๋ ฅ์ธ ์ผ๋ฐ˜ ํŒŒ์ผ ์ด๋ฆ„์„ ํ—ˆ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
LDFLAGS์˜ ํŒŒ์ผ
(์ตœ์†Œํ•œ *.a, *.o ๋ฐ *.so).

์ด๋ก ์ƒ "-L${SRCDIR}๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” .a ๋ฐ .so์™€ ๋‹ฌ๋ฆฌ
-lname", ์ถ”๊ฐ€
๋ง์ปค ๋ช…๋ น์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ฐœ์ฒด ํŒŒ์ผ์€ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ CGO_LDFLAGS_ALLOW๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด๋Š” ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ
๋Œ€์•ˆ์€ ๋‚ด file.o์˜ ์ด๋ฆ„์„ file.syso๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
ํŠน์ • ๋นŒ๋“œ ํƒœ๊ทธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น file.o๋ฅผ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์˜ต์…˜
ํฌํ•จ(
๋นŒ๋“œ ํƒœ๊ทธ๋Š” #cgo LDFLAGS ํ”„๋ฆฌ์•ฐ๋ธ”์„ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ์— ์ ์šฉ๋จ) ๋ฐ
๋ฐฉ๋ฒ•์ด ์—†๋‹ค
syso ํŒŒ์ผ ์ด๋ฆ„์— ์ž„์˜์˜ ๋นŒ๋“œ ํƒœ๊ทธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „์— ๋ฐฐํฌ๋œ Go ๋ฒ„์ „์„ ๋ฌด์‹œํ•˜๋ฉด ๋‹ค์Œ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒˆ๋กœ์šด
๋ง์ปค์— ๋” ๋งŽ์€ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ "#cgo LDLIBS"
๋ช…๋ น์ค„.
๊ทธ๋Ÿฐ ๋‹ค์Œ LDLIBS์— ๋Œ€ํ•ด ๋” ์—„๊ฒฉํ•œ ๊ทœ์น™์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํŒŒ์ผ ์ด๋ฆ„๋งŒ, ๋Œ€์‹œ ์—†์Œ
์ ‘๋‘์‚ฌ์— ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.)

--std=c99 ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

-std=c++11

๋‚ด ์ƒ๊ฐ์— -std=ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ ค์•ผ ํ•˜๋‚˜?

ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ: -fopenmp

Go v1.10rc2๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ bimg ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

23:24 ~/go-test
master ms 130 % go get -v github.com/h2non/bimg
github.com/h2non/bimg (download)
github.com/h2non/bimg
go build github.com/h2non/bimg: invalid flag in pkg-config --cflags: -fopenmp

-isystem ์˜†์— ์žˆ๋Š” ์ธ์ˆ˜(๊ฒฝ๋กœ์ž„)๊ฐ€ ๊ฑฐ๋ถ€๋˜๋ฏ€๋กœ

๋˜ํ•œ ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/golang/go/issues/23749#issuecomment -364239496

์šฐ๋ฆฌ๋Š” ์ด์ „์—:

#cgo linux LDFLAGS: ${SRCDIR}/../../../../path/to/thing/libthing_static.a

๋‹ค์Œ์œผ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

#cgo linux LDFLAGS: -L${SRCDIR}/../../../../path/to/thing -lthing_static

.../path/to/thing ์€ ${SRCDIR} ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด SRCDIR ํ™•์žฅ์ด ํ•„์š”ํ•œ libthing.a ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋˜๋„๋ก ์ด ์ฃผ์„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

OSX์—์„œ cgo ํ”Œ๋ž˜๊ทธ ์ œํ•œ์ด ์žˆ๋Š” ์ƒˆ๋กœ ๋ฐœํ–‰๋œ go1.9.4์—์„œ ๋ง์ปค์— ๋งํฌํ•  ์•„์นด์ด๋ธŒ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ตฌ์ฒด์ ์œผ๋กœ ์ง€์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. (์—ฌ๊ธฐ์—์„œ๋Š” https://github.com/gijit/gi/blob/master/vendor/ github.com/glycerine/golua/lua/lua.go#L10 )

~~~

cgo LDFLAGS: ${SRCDIR}/../../../LuaJIT/LuaJIT/src/libluajit.a -lm -ldl

~~~

๋นŒ๋“œ ์‹œ๋„ ์‹œ ์ƒ์„ฑ:

~๋นŒ๋“œํ•˜๋‹ค- govitviters ๋นŒ๋“œ -ldflags "-X main.LastGitCommitHash=30259813c10c0f6b63768b4f35358828e2e29f0b -X main.BuildTimeStamp=2018-02-09T22:49:48+0700 -X main.Git =go_version_go1.9.4_darwin/amd64" -o ๊ธฐ๋นŒ๋“œ github.com/gijit/gi/vendor/github.com/glycerine/golua/lua: #cgo LDFLAGS์˜ ์ž˜๋ชป๋œ ํ”Œ๋ž˜๊ทธ: /Users/jaten/go/src/github.com/gijit/gi/vendor/github. com/glycerine/golua/lua/../../../LuaJIT/LuaJIT/src/libluajit.amake[2]: * [๋นŒ๋“œ] ์˜ค๋ฅ˜ 1make[1]: [์„ค์น˜] ์˜ค๋ฅ˜ 2make: ** [์„ค์น˜] ์˜ค๋ฅ˜ 2jaten@jatens-MacBook-Pro ~/go/src/github.com/gijit/gi (๋งˆ์Šคํ„ฐ) $~
-L -l ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
~~~

cgo LDFLAGS: -L${SRCDIR}/../../../LuaJIT/LuaJIT/src -lluajit -lm -ldl

~~~
ํ•˜์ง€๋งŒ ๋ง์ปค๋Š” ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋งํฌ ํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ ๋Ÿฐํƒ€์ž„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

~~~
๋Ÿฐํƒ€์ž„์—...
dyld: ์ง€์—ฐ ๊ธฐํ˜ธ ๋ฐ”์ธ๋”ฉ ์‹คํŒจ: ๊ธฐํ˜ธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ: _luajit_ctypeid
์ฐธ์กฐ: /var/folders/6s/zdc0hvvx7kqcglg5yqm3kl4r0000gn/T/go-build615587282/github.com/gijit/gi/pkg/compiler/_test/compiler.test
์˜ˆ์ƒ ์œ„์น˜: /usr/local/lib/libluajit-5.1.2.dylib

dyld: ๊ธฐํ˜ธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ: _luajit_ctypeid
์ฐธ์กฐ: /var/folders/6s/zdc0hvvx7kqcglg5yqm3kl4r0000gn/T/go-build615587282/github.com/gijit/gi/pkg/compiler/_test/compiler.test
์˜ˆ์ƒ ์œ„์น˜: /usr/local/lib/libluajit-5.1.2.dylib

SITRAP: ์ถ”์  ํŠธ๋žฉ
PC=0x7fff66ff4075 m=0 ์‹œ๊ทธ์ฝ”๋“œ=1
cgo ์‹คํ–‰ ์ค‘์— ๋„์ฐฉํ•œ ์‹ ํ˜ธ
~~~
/usr/local/lib/libluajit-5.1.2.dylib๋Š” ๋™์ ์œผ๋กœ ๋งํฌ๋˜์—ˆ์ง€๋งŒ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€์‹  ${SRCDIR}/../../../LuaJIT/LuaJIT/src/libluajit.a์— ์ง€์ •๋œ ๊ฒƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: ์ด๊ฒƒ์„ ๋‚ด makefile์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
~๋‚ด๋ณด๋‚ด๊ธฐ CGO_LDFLAGS_ALLOW="${GOPATH}/src/github.com/gijit/gi/vendor/github.com/glycerine/golua/lua/../../../LuaJIT/LuaJIT/src/libluajit.a";~

์—…๋ฐ์ดํŠธ: ๊ณ ๋ง™๊ฒŒ๋„ Ian์€ ๋” ์งง์€ ์ •๊ทœ์‹ ๋ฒ„์ „์ด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ง€์ ํ–ˆ์Šต๋‹ˆ๋‹ค.
~๋‚ด๋ณด๋‚ด๊ธฐ CGO_LDFLAGS_ALLOW=".*.a";~

-Wl,-framework๋Š” ๋ฌด์—‡์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด Apple ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๋ฉด ์ธ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ -Wl,-framework,foo๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Apple ํ”„๋ ˆ์ž„์›Œํฌ์ธ ๊ฒฝ์šฐ -framework(-Wl ์—†์Œ)๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

1.10rc2์—์„œ๋Š” golang.org/x/net/internal/socket์ด ๋” ์ด์ƒ Solaris์šฉ์œผ๋กœ ๋นŒ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$ GOOS=solaris go build golang.org/x/net/ipv4
# golang.org/x/net/internal/socket
ext/src/golang.org/x/net/internal/socket/sys_solaris.go:24:3: //go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" only allowed in cgo-generated code
ext/src/golang.org/x/net/internal/socket/sys_solaris.go:25:3: //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" only allowed in cgo-generated code
ext/src/golang.org/x/net/internal/socket/sys_solaris.go:26:3: //go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" only allowed in cgo-generated code
ext/src/golang.org/x/net/internal/socket/sys_solaris.go:27:3: //go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" only allowed in cgo-generated code

(์ด๊ฒƒ์€ ํฌ๋กœ์Šค ๋นŒ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ์ผ์–ด๋‚˜๋Š” cgo๋Š” ์—†์ง€๋งŒ ๊ทธ๊ฒƒ์€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.)

์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ •์  lib ํŒŒ์ผ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

#cgo LDFLAGS: /usr/local/lib/libsecp256k1.a

๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค :(

@piotrnar CGO_LDFLAGS_ALLOW='.*\.a$'

@ianlancetaylor , ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ์ด์ง€๋งŒ ๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ go 1.9.4์— ๋Œ€ํ•ด CGO_LDFLAGS_ALLOW='.*\.a$' ๋ฅผ ํ•˜๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ์—‰๋šฑํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ๋” ๋‚˜์€(์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ) ์†”๋ฃจ์…˜์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@piotrnar ์˜ˆ, ์ด ๋ฌธ์ œ์˜ ์š”์ ์€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์šฐ๋ฆฌ๋Š” .ํŒŒ์ผ์„ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

-fstack-protector ๋„ ์ถ”๊ฐ€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š” :)

ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ -static-libstdc++ ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ github.com/flynn/hid ๋Š” darwin์—์„œ LDFLAGS๋ฅผ ํ†ตํ•ด -fconstant-cfstrings ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1.9.4๋กœ ๋นŒ๋“œ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ง์ปค ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค
-Wl,-Bstatic
-Wl,-B๋™์ 
-Wl,--start-๊ทธ๋ฃน
-Wl,--end-๊ทธ๋ฃน

์†”์งํžˆ: ์ด ์‹œ์ ์—์„œ ๋‚˜์œ ์˜ต์…˜์˜ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ทธ๋Ÿฐ ๊ด‘๋ฒ”์œ„ํ•œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋” ์œ ์šฉํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋Š” ์ž ์žฌ์ ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์ด ๋„์ž…๋˜๋ฉด ๋ชจ๋“  Go ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•ด๋‹น ์˜ต์…˜์— ์ทจ์•ฝํ•ด์งˆ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ž ์žฌ์ ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ”๋žŒ์งํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–‘์ชฝ์œผ๋กœ ์ž๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ƒˆ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋  ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ƒˆ C ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ Go ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...

@glycerine ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํƒˆ์ถœ๊ตฌ๋กœ ์ œ๊ณตํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๊นŒ์ง€ ํ•ญ์ƒ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ˆœ์ „ํžˆ 'go get'์„ ํ†ตํ•ด ์„ค์น˜๋œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” env ๋ณ€์ˆ˜๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹: go project๋ผ๋Š” ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์„ค์น˜๋˜๋Š” ๊ธฐ๋ณธ '๊ตฌ์ถ•' ํ”„๋กœ์ ํŠธ๋Š” ํ•„์š”ํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ALLOW ์ •๊ทœ์‹ ์‚ฌ์šฉ). ๋™์‹œ์— ์ข…์† ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž„์˜์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@glycerine ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ์˜ต์…˜์„ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ธฐ๋ณด๋‹ค ํ•ด๋‹น ์ œ์•ˆ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ–ฅํ›„ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” ๋…ผ์˜ํ•  ์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค(์ƒˆ ๋ฌธ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค). ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์— ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ์˜ต์…˜์„ ์ˆ˜์ง‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

#cgo CFLAGS: -pipe์˜ ์ž˜๋ชป๋œ ํ”Œ๋ž˜๊ทธ

go build github.com/zchee/docker-machine-driver-xhyve/vendor/github.com/zchee/libhyperkit: invalid flag in #cgo CFLAGS: -fno-common

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. -Wl,--enable-new-dtags

๋ ˆ์‹œํ”ผ/qt๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

go build github.com/therecipe/qt/core: invalid flag in #cgo CFLAGS: -pipe

ํ—ˆ์šฉ๋œ ํ”Œ๋ž˜๊ทธ์— .*\.a ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
https://github.com/golang/go/issues/23807 ์ฐธ์กฐ

--mms-bitfields๋„ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์ปดํŒŒ์ผ๋Ÿฌ(๋ฐ ๋ง์ปค ๋“ฑ) ์˜ต์…˜์ด ์ด์œ ๊ฐ€ ์žˆ๊ณ  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ํŠน๋ณ„ํžˆ ์œ„ํ—˜ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ์˜ต์…˜์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋ถ„๋ช…ํžˆ ์ˆ˜๋ฐฑ ๊ฐœ๊ฐ€ ์žˆ๊ณ  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ๋Š” ์žฌ๋ฏธ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ๊ฒฐ์ •๋œ ๊ฒฝ๋กœ๋ผ๋ฉด ...

๋ชจ๋“  ์ปดํŒŒ์ผ๋Ÿฌ(๋ฐ ๋ง์ปค ๋“ฑ) ์˜ต์…˜์ด ์ด์œ ๊ฐ€ ์žˆ๊ณ  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ํŠน๋ณ„ํžˆ ์œ„ํ—˜ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ์˜ต์…˜์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋ถ„๋ช…ํžˆ ์ˆ˜๋ฐฑ ๊ฐœ๊ฐ€ ์žˆ๊ณ  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ๋Š” ์žฌ๋ฏธ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ๊ฒฐ์ •๋œ ๊ฒฝ๋กœ๋ผ๋ฉด ...

์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋…ผ์˜๋˜์—ˆ์ง€๋งŒ ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค์—์„œ ๋†€๋ผ์šด ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ๋ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ผ๊ฐ”๊ณ  1.10์— ๋Œ€ํ•ด ํ™œ์„ฑํ™”๋œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์‹œ์Šคํ…œ์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. RC ๋™์•ˆ. ์ถ”๊ฐ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์ผ๋ถ€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ๊ทธ๋‹ค์ง€ ์‹ค์šฉ์ ์ด์ง€ ์•Š์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์‚ฌ๋žŒ๋“ค์ด 1.9.3์œผ๋กœ ๋˜๋Œ์•„๊ฐ€ ์™„์ „ํžˆ ๋ณดํ˜ธ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ด€์ฐฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ „์ ์œผ๋กœ ์—ญํšจ๊ณผ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์™€์ผ๋“œ์นด๋“œ์™€ ์ •๊ทœ์‹์œผ๋กœ ๊ฐ€๋“ ์ฐฌ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ์œ„์žฅ๋œ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๊ฐ€ ๋˜๋Š” ์‹œ์ ์€?

gomobile์€ -fobjc-arc -fmodules -fblocks ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

https://github.com/golang/mobile/blob/5704e182c7003d4b7e94c23373f3fad4e5ceb25a/bind/genobjcw.go#L319

https://github.com/augustoroman/v8 ์€ -pthread๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

https://github.com/augustoroman/v8/blob/master/v8.go#L15

-flto

๋‹ค์Œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ฐœ์š”๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก "์Šน์ธ๋œ" ๋ชฉ๋ก์„ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ชฉ๋ก์„ ์ด ๋ฌธ์ œ์˜ ๋งจ ์œ„์— ์˜ฌ๋ ค ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? CL์„ ์ œ์ถœํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์ด์— ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹น์žฅ(ํŠนํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ์ €๋Š” ๊ท ์—ด ์‚ฌ์ด๋กœ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋” ๊ฑฑ์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋จผ์ € ์šฐ๋ฆฌ์™€ ์ƒ์˜ํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ์ ํŠธ์—์„œ ์ œ๊ฑฐํ•œ ๋นŒ๋“œ ํ”Œ๋ž˜๊ทธ๋กœ ์ธํ•ด cgo(๋ฐ ํ™•์žฅํ•˜์—ฌ Go)๊ฐ€ ๊นจ์กŒ๋‹ค๋Š” ์ž˜๋ชป๋œ ๋ฏฟ์Œ์„ ๊ฐ–๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๊ฐ€ ์žˆ๊ณ  ํšŒ๊ท€๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์ดํ•˜๋Š” ์ผ์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. :S (๋˜๋Š” ๋” ๋‚˜์œ ๊ฒƒ์€, ๋‹น์‹  ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ณ  ๋ถ„๋ช…ํžˆ ๋‚ด ํŒจํ‚ค์ง€๋ฅผ ์ž˜๋ชป ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‹น์‹  ์€ ์˜์กด์„ฑ xyz๊ฐ€ ํ•˜๋‚˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!)

"์ด ๋ฌธ์ œ ์ฐธ์กฐ" ๋งํฌ ์ค‘ ์ผ๋ถ€๋Š” ์•„์ง ์ด ๋ฌธ์ œ์— ์ ์ ˆํ•˜์ง€ ์•Š์€ ์ถ”๊ฐ€ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ํŠนํžˆ ์ค‘๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋งจ ์œ„์— ๋งˆ์Šคํ„ฐ ๋ชฉ๋ก์ด ์žˆ์Œ์„ ๋ณด์ฆํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ •์  ์•„์นด์ด๋ธŒ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...

์ด๊ฒƒ์€ gcc ๋ฐ clang ์ž์ฒด๊ฐ€ a) ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋”๋Ÿฌ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  c) ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋Œ ์ˆ˜ ์—†๋Š” ์˜ต์…˜์„ --no-unsafe-options ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์ œ๊ณต ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค --no-unsafe-options ์˜ต์…˜(์ผ๋‹จ ์žˆ์œผ๋ฉด ์žˆ๋Š” ๊ฒƒ, ๋งˆ์นจํ‘œ). ์•„๋‹ˆ๋ฉด go get ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ํ•„ํ„ฐ๋ง์ด ํ•„์š”ํ•œ ์ตœ์ดˆ์ด์ž ์œ ์ผํ•œ ์ƒํ™ฉ์ž…๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๊ฐ€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ ์ง‘ํ•œ๋‹ค๋ฉด ์™œ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ ์ง€์—ฐ์ด ํ•„์š”ํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ๋ˆ„๊ตฐ๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๊ฐ ํ”Œ๋ž˜๊ทธ์—๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒ˜ํ”Œ๋ง์€ ๋Œ€ํ‘œ์„ฑ์ด ๋‚ฎ๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ˜„์žฌ ์‹คํ˜„๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ƒ˜ํ”Œ๋ง๋˜์ง€ ์•Š์€ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์šฐ๋ฆฌ ๋ชจ๋‘์—๊ฒŒ ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์˜์‚ฌ ์ฝ”๋“œ์—์„œ ์ด ์ ˆ์ฐจ๋ฅผ ํ†ตํ•ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  C/C++ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ง€์›๋˜๋Š” ๊ฐ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฒ„์ „์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฒ„์ „์— ๋Œ€ํ•ด ํ•ด๋‹น ๋ฌธ์„œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋˜๋Š” (๋ณด์ด์ง€ ์•Š๋Š”) ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์‹ญ์‹œ์˜ค.

๋ˆ„์  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ํ•˜๋‚˜(๋˜๋Š” ๋‘ ๊ฐœ์˜) ์ทจ์•ฝํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•  ๋•Œ ์ด๊ฒƒ์ด ๋ฏธ์นœ ์ง“์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(reductio ad absurdum์— ๊ฐ€๊นŒ์šด). ๊ทธ๋Ÿฌ๋‚˜ ์ง„์ง€ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ ์ง‘ํ•œ๋‹ค๋ฉด ์œ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ •ํ™•ํ•˜๊ณ  ์ถ”์ธก์„ ์—†์• ๊ณ  ์ง€์ฒด ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํ•„์š”ํ•œ ์œ ์ผํ•œ ์ถ”๊ฐ€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์€ ์ง€์›๋  ์ปดํŒŒ์ผ๋Ÿฌ/๋ฒ„์ „์˜ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์œ ์ผํ•œ ์˜ต์…˜์€ .go ํŒŒ์ผ์˜ #cgo CFLAGS ๋˜๋Š” #cgo LDFLAGS ํ–‰์— ๋„ฃ๋Š” ๊ฒƒ์ด ํ•ฉ๋‹นํ•˜๊ฑฐ๋‚˜ pkg-config --cflags ๋˜๋Š” pkg-config --libs . ์ด๋Š” ์ด ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ ์ˆ˜์˜ ์ž‘์€ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๋˜ํ•œ gcc์™€ clang์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์˜ต์…˜์ด ์žˆ๋Š”์ง€ ๊ณผ์†Œํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์—์„œ๋„ ๋ชจ๋‘ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋Š”์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์ƒ์„ฑ๋˜๋”๋ผ๋„ ๋†€๋ผ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋˜ํ•œ ๋Œ€์ƒ ์‚ผ์ค‘ ์ข…์†์ ์ธ ์˜ต์…˜์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด๊ฒƒ์ด ์•ˆ์ „ ํ”Œ๋ž˜๊ทธ์˜ ์ •์‹ ๋ชฉ๋ก์ด gcc ๋ฐ clang ๊ฐœ๋ฐœ์ž์— ์˜ํ•ด ์œ ์ง€ ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.)

๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ณ„ ํ”Œ๋ž˜๊ทธ ํŒจ์น˜๊ฐ€ ์ง€์—ฐ๋˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด ๋ง๋„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@anacrolix #23672์—์„œ -Wl,-framework ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ -framework ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”.

๋˜ํ•œ gcc์™€ clang์—๋Š” ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์˜ต์…˜์ด ์žˆ๋Š”์ง€ ๊ณผ์†Œํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

@andlabs Ian์€ gcc ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฐ€ ์ž˜ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

https://golang.org/cl/93836 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: cmd/go: add options to security whitelist

์œ„์˜ ๋ชจ๋“  ์˜ต์…˜์„ ํฌํ•จํ•˜๋Š” CL์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค: https://golang.org/cl/93836.

๊ทธ๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜ ์ค‘ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ์˜ต์…˜์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌ ํ•ด์š”.

LLVM Go ๋ฐ”์ธ๋”ฉ์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ๋‹ค์Œ ๋ง์ปค ์˜ต์…˜์ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • -Wl,-search_paths_first
  • -Wl,-headerpad_max_install_names

๋ง์ปค ์˜ต์…˜์€ llvm-config --ldflags ๋ช…๋ น์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋ฉฐ ์ถœ๋ ฅ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ: https://reviews.llvm.org/D43070

@magical ๋‚˜๋Š” ๊ฑฐ๊ธฐ์— @glycerine ์— ์‘๋‹ตํ•˜๊ณ  ์žˆ์—ˆ๋‹ค =P

@ianlancetaylor ๋„ ์ด

@andlabs ์•„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค

@ianlancetaylor ํ•ด๋‹น CL์„ ์‚ฌ์šฉํ•˜์—ฌ Solaris์šฉ golang.org/x/net/internal/socket์„ ์—ฌ์ „ํžˆ ๋นŒ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ”Œ๋ž˜๊ทธ๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š”์ง€๋Š” ์˜ค๋ฅ˜์—์„œ ๋‚˜์—๊ฒŒ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$ ./bin/go version
go version devel +09dc376990 Tue Feb 13 20:58:04 2018 -0800 darwin/amd64
$ GOOS=solaris ./bin/go get -u golang.org/x/net/ipv4
# golang.org/x/net/internal/socket
../../ext/src/golang.org/x/net/internal/socket/sys_solaris.go:24:3: //go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" only allowed in cgo-generated code
../../ext/src/golang.org/x/net/internal/socket/sys_solaris.go:25:3: //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" only allowed in cgo-generated code
../../ext/src/golang.org/x/net/internal/socket/sys_solaris.go:26:3: //go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" only allowed in cgo-generated code
../../ext/src/golang.org/x/net/internal/socket/sys_solaris.go:27:3: //go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" only allowed in cgo-generated code

@calmh ๋„ค. golang.org/x/net์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋งŽ์€ ๋‚ด๋ถ€ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์˜์กดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@calmh ์‹ค์ œ Solaris ์‹œ์Šคํ…œ์—์„œ https://golang.org/cl/94015 ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://golang.org/cl/94015 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: internal/socket: rework Solaris reliance on syscall package

@rsc @ianlancetaylor @anacrolix -Wl,-framework ๊ฐ€ ์–ด๋””์—์„œ ์˜ค๋Š”์ง€ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค. GTK+์˜ ์ข…์†์„ฑ์ธ GLib์šฉ pkg-config ํŒŒ์ผ์—์„œ ์™”์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๊ตญ์ œํ™”๋ฅผ ์œ„ํ•œ CoreFoundation ๋งํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์ฐธ์กฐ: https://gitlab.gnome.org/GNOME/glib/blob/master/glib-2.0.pc.in#L14 ์—ฌ๊ธฐ์„œ @INTLLIBS@ ๋Š” https://gitlab ์—์„œ -Wl,-framework -Wl,CoreFoundation ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. .gnome.org/GNOME/glib/blob/master/m4macros/glib-gettext.m4#L143

๋‹ค์–‘ํ•œ ๋‹ค๋ฅธ pkg-config ํŒŒ์ผ์— ๋‹ค๋ฅธ -Wl,-framework ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” (์œ„์™€ ๊ฐ™์ด) ํ”„๋กœ์ ํŠธ ์ž์ฒด์˜ ์ผ๋ถ€์ด๊ณ  ์ผ๋ถ€๋Š” Homebrew์— ์˜ํ•ด ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ œ ์‹œ์Šคํ…œ์—์„œ๋Š” libcdio์™€ SDL์ด ๋ชจ๋‘ -Wl,-framework,FrameworkName ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ฆ‰, -Wl,-framework -Wl,FrameworkName ๋ฐ -Wl,-framework,FrameworkName ๋ชจ๋‘ pkg-config ํŒŒ์ผ์—์„œ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค.)

https://golang.org/cl/94018 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: cmd/compile: permit go:cgo_import_dynamic anywhere

@calmh https://golang.org/cl/94018 ์—์„œ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•˜๊ณ 

@andlabs ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. CL 93836์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” SDL์„ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ pgkconfig์—๋Š” -Wl,--no-undefined ์™€ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ •์˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™”์ดํŠธ ๋ฆฌ์ŠคํŠธ ์•„๋ž˜์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ cgoemitter ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ github.com/supermock/cgoemitter-demo/x: #cgo์˜ ์ž˜๋ชป๋œ ํ”Œ๋ž˜๊ทธ LDFLAGS: -Wl,-unresolved-symbols=ignore-all

๋ฏธ๋ฆฌ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

CL์„ ๋‹ค์‹œ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค.

https://golang.org/wiki/InvalidFlag ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” Wiki ํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ Wiki๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก CL์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

https://golang.org/cl/94158 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: doc: add note about invalid flag errors to 1.10 release notes

invalid flag in #cgo LDFLAGS: -O3

https://golang.org/cl/94655 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: [release-branch.go1.10] doc: add note about invalid flag errors to 1.10 release notes

https://golang.org/cl/94675 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: [release-branch.go1.10] cmd/compile: permit go:cgo_import_dynamic anywhere

https://golang.org/cl/94676 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: [release-branch.go1.10] cmd/go: add options to security whitelist

๋˜ํ•œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

go build github.com/andlabs/ui: invalid flag in #cgo LDFLAGS: -mmacosx-version-min=10.8

@bgk- ์ ์šฉ๋œ ํŒจ์น˜๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. 1.10์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ์ง€๊ธˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๋ฉด 1.9.5๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

1.10์—์„œ invalid pkg-config package name: --static ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ฐฉ๊ธˆ homebrew์—์„œ ์ตœ์‹  ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ–ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

โžœ  ~ go version
go version go1.10 darwin/amd64
... 
โžœ  ~ go build
...
go build github.com/flier/gohs/hyperscan: invalid pkg-config package name: --static

@ptoomey3 #

1.9.5์— ์žฌ๊ฐœ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” XY ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ณ  ์˜คํžˆ๋ ค ๋‚ด๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ์ผ์„ ์™„์ „ํžˆ ์„ค๋ช…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. -buildmode=c-shared ์™€ ํ•จ๊ป˜ postgresql ํ™•์žฅ์„ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

postgresql์„ ์œ„ํ•œ C ํ™•์žฅ์„ ๋งŒ๋“œ๋Š” ๋ฌธ์„œ์—์„œ ๊ณต์œ  ๊ฐ์ฒด๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

cc -fPIC -c foo.c
cc -shared -o foo.so foo.o

๊ทธ๋ž˜์„œ ์†Œ์Šค ์ฝ”๋“œ์— #cgo LDFLAGS: -shared ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ(go1.10)๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋นŒ๋“œ๋ฅผ ์ค‘์ง€ํ•  ๋•Œ๊นŒ์ง€ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

invalid flag in #cgo LDFLAGS: -shared

๋ฐฉ๊ธˆ go 1.10์„ ์žก๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

invalid flag in #cgo LDFLAGS: -Wl,-static

์ด๊ฒƒ์€ ๋งํฌ ๋ผ์ธ์—์„œ ํ•ด๋‹น ์˜ต์…˜ ์ดํ›„์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ •์  ๋งํฌ๋ฅผ ๊ฐ•์ œ ์‹คํ–‰ํ•˜๋Š” gcc ๋ง์ปค ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.

@spackard ๊ธฐ๋ก์„ ์œ„ํ•ด, ๊ทธ๊ฒƒ์€ ๊ทธ ์˜ต์…˜์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. -Bstatic ์ƒ๊ฐ ์ค‘์ž…๋‹ˆ๋‹ค. -static ์˜ต์…˜์€ ๋ง์ปค๊ฐ€ -l ์˜ต์…˜์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. -static ๋Š” ์œ„์น˜ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ช…๋ น์ค„์— ๋‚˜ํƒ€๋‚˜๋Š” ์œ„์น˜๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ianlancetaylor ์œ„์น˜์— ๋Œ€ํ•ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ด€๊ณ„์—†์ด ์ •์  ๋งํฌ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ก์„ ์œ„ํ•ด CGO_LDFLAGS_ALLOW ์ถ”๊ฐ€ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ๋‹ค

invalid flag in #cgo CFLAGS: -m32

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ -O3, -static-libgcc ๋ฐ -static-libstdc++๋กœ ์ ์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

-O3:

cgo ์ฐฝ LDFLAGS: -O3 -L./ -lmass -static-libgcc -static-libstdc++

cgo ๋ฆฌ๋ˆ…์Šค LDFLAGS: -O3 -L./ -lmass -ldl -lm -lrt -static-libgcc -static-libstdc++

cgo CFLAGS: -O3

#cgo์˜ ์ž˜๋ชป๋œ ํ”Œ๋ž˜๊ทธ LDFLAGS: -O3

-์ •์ -libgcc:

cgo ์ฐฝ LDFLAGS: -L./ -lmass -static-libgcc -static-libstdc++

cgo ๋ฆฌ๋ˆ…์Šค LDFLAGS: -L./ -lmass -ldl -lm -lrt -static-libgcc -static-libstdc++

#cgo LDFLAGS์˜ ์ž˜๋ชป๋œ ํ”Œ๋ž˜๊ทธ: -static-libgcc

-์ •์ -libstdc++:

cgo ์ฐฝ LDFLAGS: -L./ -lmass -static-libstdc++

cgo ๋ฆฌ๋ˆ…์Šค LDFLAGS: -L./ -lmass -ldl -lm -lrt -static-libstdc++

#cgo LDFLAGS์˜ ์ž˜๋ชป๋œ ํ”Œ๋ž˜๊ทธ: -static-libstdc++

ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ •์  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์„ค์ •์ด ์žˆ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$GOROOT/bin/cgo.cfg
[ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ]
๋ธ”๋ผ๋ธ”๋ผ๋ธ”๋ผ
...

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์•ฝ๊ฐ„์˜ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

@kruglinski CGO_CFLAGS_ALLOW ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ์นœ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ianlancetaylor

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ๋ฐฉ๊ธˆ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋†“์ณค์Šต๋‹ˆ๋‹ค. :-) ์•Œ๊ณ  ๋ณด๋‹ˆ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

24124๋Š” ๋‹ค์Œ ๋ง์ปค ์˜ต์…˜์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

-Wl,-z,relro

๋ง์ปค ์˜ต์…˜ -Wl,--subsystem,windows ๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ -mwindows ์ด ๋ชจ๋‘ ์—†์Šต๋‹ˆ๋‹ค.

gomobile/gobind๊ฐ€ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ž‘์—… ์ค‘ ์ผ๋ถ€๋Š” CGO_*FLAGS ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ #cgo ์ง€์‹œ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋˜์–ด ๋ช‡ ๊ฐ€์ง€ ๋” ๋งŽ์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

````
-isysroot(์•„์ด์˜ค์Šค)
-mios-simulator-version-min=(์•„์ด์˜ค์Šค)
-miphoneos-๋ฒ„์ „-์ตœ์†Œ=(์•„์ด์˜ค์Šค)

-ํ‘œ์ (์•ˆ๋“œ๋กœ์ด๋“œ์šฉ)
--sysroot(์•ˆ๋“œ๋กœ์ด๋“œ์šฉ)
-gcc-๋„๊ตฌ ์ฒด์ธ(์•ˆ๋“œ๋กœ์ด๋“œ์šฉ)
````

๋งˆ์ง€๋ง‰ -gcc-toolchain์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒƒ์ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

macOS์—์„œ CGO_LDFLAGS_ALLOW ์—†์ด Godot ๊ฒŒ์ž„ ์—”์ง„ ์„ ์œ„ํ•œ Go ๋ฐ”์ธ๋”ฉ ์„ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

-Wl,-undefined,dynamic_lookup

zchee/libhyperkit์˜ ์ถ”๊ฐ€ CFLAGS :

  • -fmessage-length=152
  • -fdiagnostics-show-note-include-stack
  • -fmacro-backtrace-limit=0

v8worker๋Š” Mac OS X์—์„œ -stdlib=libstdc++ ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

CL 103156 Go 1.9.5์šฉ OK

https://golang.org/cl/103135 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: [release-branch.go1.9] cmd/go: add options to security whitelist

๋ชฉ๋ก์—์„œ ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. libtool๋„ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

invalid flag in #cgo LDFLAGS: -I/usr/local/share/libtool

@PassKit -I ๋Š” ldflag๊ฐ€ ์•„๋‹Œ cflag(๋ชฉ๋ก์— ์žˆ์Œ)์ž…๋‹ˆ๋‹ค. ์™œ ldflags์— ๋„ฃ์Šต๋‹ˆ๊นŒ?

๋” ๋งŽ์€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์š”์ฒญ์„ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

#24703์—์„œ

CFLAGS: -fno-plt

์ด ์‹œ์ ์—์„œ ์ผ๋ถ€ ์ธ๊ธฐ ์žˆ๋Š” ํŒจํ‚ค์ง€๊ฐ€ ๋นŒ๋“œ์— ์‹คํŒจํ•˜๊ณ  ์•„์ง ๋ณด๊ณ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ 1.9 ๋ฐ 1.10 ๋ฆด๋ฆฌ์Šค ๋ถ„๊ธฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฌด์ž‘์œ„ ์˜ต์…˜์„ ๊ณ„์† ๋ฐฑํฌํŒ…ํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 1.11์— ๋Œ€ํ•œ ํŒ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ ์ถ”์ ํ•˜๋“  ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ถ”์ ํ•˜๋“  ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

sgtm

@AlexRouSg ๋‚ด ๋ฌธ์ œ๋Š” ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ธ ldflag๋กœ "-I"๋ฅผ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋Š” ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/miekg/pkcs11/issues/63

๋Šฆ์–ด์„œ ์ฃ„์†กํ•˜์ง€๋งŒ 1.9.5 ๋˜๋Š” 1.10.2์—์„œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

CXXFLAGS: -F/Users/user/Qt/5.10.1/clang_64/lib
CFLAGS: --sysroot=/Users/user/android-ndk-r14b/sysroot
CFLAGS: -mfloat-abi=softfp
CFLAGS: -fno-builtin-memmove
CFLAGS: -mthumb
CFLAGS: -fobjc-nonfragile-abi
CFLAGS: -fobjc-legacy-dispatch
CFLAGS: -fno-keep-inline-dllexport
CXXFLAGS: -mthreads
CFLAGS: -Wp,-D_FORTIFY_SOURCE=2
CFLAGS: --param=ssp-buffer-size=4
CFLAGS: -mfloat-abi=hard
CFLAGS: -fvisibility-inlines-hidden
CFLAGS: -mfpmath=sse
CFLAGS: -fasynchronous-unwind-tables
CFLAGS: -feliminate-unused-debug-types
CFLAGS: -marm
CFLAGS: -mabi=aapcs-linux
CFLAGS: -mthumb-interwork

๊ทธ๋ฆฌ๊ณ 

LDFLAGS: -headerpad_max_install_names
LDFLAGS: -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk
LDFLAGS: -Wl,-rpath,@executable_path/Frameworks
LDFLAGS: --sysroot=/Users/user/android-ndk-r14b/platforms/android-16/arch-arm/
LDFLAGS: -Wl,-rpath-link=/Users/user/Qt/5.10.1/android_armv7/lib
LDFLAGS: -Wl,--allow-shlib-undefined
LDFLAGS: -Wl,-e,_qt_main_wrapper
LDFLAGS: -Wl,-O1
LDFLAGS: -Wl,-rpath-link,/opt/Qt/5.10.0/gcc_64/lib
LDFLAGS: -Wl,-s
LDFLAGS: -Wl,-subsystem,console
LDFLAGS: -mthreads
LDFLAGS: -rdynamic
LDFLAGS: -mfloat-abi=hard

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@therecipe 1.11์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 1.9.5 ๋˜๋Š” 1.10.2์˜ ๊ฒฝ์šฐ: ์–ด๋–ค ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

@ianlancetaylor ์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ https://github.com/therecipe/qt ์˜ ๋‹ค๋ฅธ ๋Œ€์ƒ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ๋“ฑ๋กํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋Š ๊ฒƒ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ž˜ ํ™•๋ฆฝ๋  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ๊ทธ๋“ค ์ž์‹ ์˜ Qt ํŒจํ‚ค์ง€๋ผ๊ณ  ์ถ”์ธกํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์™„์ „ํžˆ ํ™•์ธ์ด (๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ง์„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค) ์ธ ๊ฒฝ์šฐ ์•„๋‹ˆ์—์š”.

๊ทธ ๋ง :

  • LDFLAGS ์ค‘ ์ผ๋ถ€๊ฐ€ ์ด๋ฏธ -Wl, ์ ‘๋‘์‚ฌ ์—†์ด ํ—ˆ์šฉ ๋ชฉ๋ก์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
  • -e ๋Š” Go์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๊นŒ?
  • -F ์ด๋ฏธ ํ—ˆ์šฉ ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์˜ต์…˜์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.
  • (@therecipe์—) ์™œ ๋‹น์‹ ์€ ์ง€ํ‚ค๊ณ  -D A๋ฅผ -Wp ? ๋งคํฌ๋กœ๋ฅผ ์ „์ฒ˜๋ฆฌ๊ธฐ์—์„œ๋งŒ ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? Qt๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ถ€๋‘๊ต๋ฅผ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค... ์•„๋‹ˆ๋ฉด Qt ์ž์ฒด์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ถŒ์žฅ ์˜ต์…˜ ๋ชฉ๋ก์ž…๋‹ˆ๊นŒ?
  • (@ianlancetaylor์—๊ฒŒ) ๋‚˜๋Š” ์ƒˆ๋กœ์šด ์˜ต์…˜์„ 1.9๋กœ ๋ฐฑํฌํŒ…ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ(์ €๋Š” Go ๋ฒ„์ „ ์‚ฌ์šฉ ๋ฉ”ํŠธ๋ฆญ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์–‘๋ฉด์ ์ž…๋‹ˆ๋‹ค), 1.12๊ฐ€ ์ถœ์‹œ๋  ๋•Œ๊นŒ์ง€ 1.10์€ ์™œ ์•ˆ ๋ ๊นŒ์š”?
  • ์œ„์˜ ๋‹ต๋ณ€์— ๊ด€๊ณ„์—†์ด ๋‚˜์—ด๋œ ARM ABI ์˜ต์…˜์„ ๋ฐฑํฌํŒ…ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค...

@andlabs ์–ธ์  ๊ฐ€๋Š” ๋ฉˆ์ถฐ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ ๋ฉˆ์ถ”๋ฉด ์•ˆ ๋ ๊นŒ์š”? ํ•˜์ง€๋งŒ ํŒจ์น˜๊ฐ€ ์ถฉ๋ถ„ํžˆ ์œ ์šฉํ•ด ๋ณด์ธ๋‹ค๋ฉด ๊ณ„์†ํ•ด์„œ ํŒจ์น˜๋ฅผ ๋ฐฑํฌํŠธํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

@andlabs ์˜ˆ, ๋ชจ๋‘ ๊ถŒ์žฅ๋˜๋Š” ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
-Wp,-D_FORTIFY_SOURCE=2 ๋Š” ๋›์ƒˆ์น˜ ํ‘œ์  iirc์—์„œ ์˜จ ๊ฒƒ์ธ๋ฐ ์™œ ๊ทธ๋ ‡๊ฒŒ ํ–ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@therecipe ์ด ๊ฒฝ์šฐ Qt์™€ Sailfish๋Š” ์–ด๋””์—์„œ ์ด๋Ÿฌํ•œ ์ œ์•ˆ์„ ํ•ฉ๋‹ˆ๊นŒ(์ฆ‰, ์ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ํŽ˜์ด์ง€ ๋˜๋Š” CLI ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ)? ์ง€๊ธˆ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋™์•ˆ Go ํŒ€์—์„œ ํ•ด๋‹น ๋ชฉ๋ก์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ -Wl, ์ ‘๋‘์‚ฌ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด LDFLAGS ๊ฒฝ๊ณ ๊ฐ€ ๋ช‡ ๊ฐœ๋‚˜ ์‚ฌ๋ผ์ง€๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๋ณผ? CFLAGS ํ•˜๋‚˜์˜ -Wp, ์ ‘๋‘์‚ฌ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋นŒ๋“œ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ LDFLAGS์˜ ์šฉ๋„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒ์ ์ธ ์„ธ๊ณ„์—์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค . (์‰ผํ‘œ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด -Wx, ์˜ต์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ gcc์™€ clang์ด ์ธ์ˆ˜๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  ๋ง์ปค(๋˜๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ ๋˜๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ)์— ์ง์ ‘ ๋ณด๋‚ด๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•˜๊ณ  ์ง์ ‘ ๋ถ€๋”ชํžˆ๊ธด ํ•˜์ง€๋งŒ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค...)

@andlabs ์˜ˆ, Qt์˜ ๋นŒ๋“œ ๋„๊ตฌ qmake ์ค‘ ํ•˜๋‚˜๋Š” *.pro , *.spec (mkspec), *.conf ๋ฐ ๊ธฐํƒ€ ๋งŽ์€ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ Makefile์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋”๋ฏธ *.pro ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ณ  Makefile์—์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ์ข…์†์„ฑ์„ ์ง์ ‘ ํ•ด๊ฒฐํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋” ์‰ฝ๊ฒŒ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ c ๋˜๋Š” ld ํ”Œ๋ž˜๊ทธ์™€ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์€ ๋Œ€์ƒ ๋˜๋Š” ์ตœ์‹ /์ด์ „ ๋ฒ„์ „์˜ Qt ์ž‘์—…์„ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ƒ์ž์—์„œ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐ€๋” ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ์ผ๋ถ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ ค์•ผ ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค.

-Wp,-D_FORTIFY_SOURCE=2 ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋›์ƒˆ์น˜ mkspec ์„ ์ฐพ์œผ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์•„๋งˆ๋„ mersdk ์ •๋„ ์–ด๋”˜๊ฐ€์— ๋ฌปํ˜€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ์€ TQtC๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ณต์‹ ๋Œ€์ƒ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. https://github.com/qt/qtbase/tree/5.11/mkspecs ๋ฐ ๋…๋ฆฝ ๋‹น์‚ฌ์ž๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋งŽ์€ ๋น„๊ณต์‹ ๋Œ€์ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ ๋™์•ˆ ๋ฐ”์ธ๋”ฉ( go ๋ž˜ํ•‘)์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋นŒ๋“œ ๋„๊ตฌ์—์„œ ์ด๋“ค์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ go build ... ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ผ๋ฐ˜ Go ์‚ฌ์šฉ์ž๋Š” ์กฐ๋งŒ๊ฐ„ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์ ์–ด๋„ ๋ฐ์Šคํฌํƒ‘ ํƒ€๊ฒŸ์˜ ๊ฒฝ์šฐ)

-๋น ๋ฅธ ์ˆ˜ํ•™

๊ณต์‹ SAP HANA ํด๋ผ์ด์–ธํŠธ ๋“œ๋ผ์ด๋ฒ„(cgo ๊ธฐ๋ฐ˜ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋Š” #cgo LDFLAGS: -Wl,-rpath -Wl,\$ORIGIN ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋ฉฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ go build SAP/go-hdb/driver: invalid flag in #cgo LDFLAGS: -Wl,-rpath ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://help.sap.com/viewer/0eec0d68141541d1b07893a39944924e/2.0.03/en-US/fba20e31f75c4f7ca56290838lang%2069e5.html?q= ์—์„œ SAP ์„ค๋ช…์„œ๋ฅผ

@cbgo #

ํ”Œ๋ž˜๊ทธ์™€ ์ธ์ˆ˜ ์Œ์„ ๋ง์ปค์— ์ „๋‹ฌํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ด์ œ ๋‘˜ ๋Œ€์‹  ํ•˜๋‚˜์˜ -Wl ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #cgo LDFLAGS: -Wl,-rpath -Wl,$๊ฐ€ ์•„๋‹Œ #cgo LDFLAGS: -Wl,-rpath,$ORIGIN์„ ์‚ฌ์šฉ ๊ธฐ์›.

@AlexRouSg ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋” ์ž์„ธํžˆ ์ฝ์–ด๋ดค์–ด์•ผ ํ–ˆ๋Š”๋ฐ :-)

@PassKit ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์…จ์Šต๋‹ˆ๊นŒ?

@zcm211 https://github.com/miekg/pkcs11 ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด 2์›”์— -I... ๋ง์ปค ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ CGO_LDFLAGS_ALLOW="-I.*" ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

darwin 64๋น„ํŠธ, go1.10.2, .o ํŒŒ์ผ์ด LDFLAG์— ๋Œ€ํ•ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
~jaten@jatens-MacBook-Pro ~/go/src/github.com/go-interpreter/chezgo (๋งˆ์Šคํ„ฐ) $ ์‹คํ–‰cd chez_scheme_9.5.1/c;








https://github.com/go-interpreter/chezgo/blob/master/embed.go#L10 ์˜ cgo ์„œ๋ฌธ์œผ๋กœ ์ธํ•ด
~~~

cgo LDFLAGS: -licov -lm -lncurses -L/usr/local/lib ./chez_scheme_9.5.1/boot/a6osx/kernel.o

~~~

@glycerine https://go-review.googlesource.com/c/go/+/94676 ์— ๋”ฐ๋ฅด๋ฉด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค . ์ƒ๋Œ€ ๊ฒฝ๋กœ ๋Œ€์‹  ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์‹œ๋„ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ข‹์€ ์บ์น˜ @AlexRouSg , ์ˆ˜๋ฝ ์ •๊ทœ์‹์€ ๋‹น์‹ ์ด ์ง€์ ํ•œ๋Œ€๋กœ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
~re( [a-zA-Z0-9_/].*\.(a|o|obj|dll|dylib|so) ), // ์ง์ ‘ ๋ง์ปค ์ž…๋ ฅ: xo ๋˜๋Š” libfoo.so (๊ทธ๋Ÿฌ๋‚˜ -foo.o ๋˜๋Š” @foo.o๋Š” ์•„๋‹˜)~
src/cmd/go/internal/work/security.go#121์€ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด .o ํŒŒ์ผ์ด . ๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž์˜ GOPATH ๋˜๋Š” ํ•ด๋‹น ํŒŒ์ผ์˜ ์œ„์น˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์ฒฉ๋ ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์šฉ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

.o ํŒŒ์ผ์ด ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์€ ${SRCDIR} ๊ฐ€ ์ œ๊ณต๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์ด๊ฒƒ์ด ๋„์ž…๋œ ์ด์œ ๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ์žŠ์–ด๋ฒ„๋ ธ์ง€๋งŒ ์ด ๋ฌธ์ œ ๋•Œ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค.)

@andlabs klunky ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ๋”๋ผ๋„ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” ๋ถ„๋ช…ํžˆ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

IIRC๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋งํฌ๊ฐ€ ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ๋Œ€์ ์ด๋ผ๋Š” ๋ณด์žฅ์€ ์—†์Šต๋‹ˆ๋‹ค( $WORK ์— ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค์‹œ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์Œ)... ๋‹ค์‹œ, ๋‚˜๋Š” ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ์—ญ์‚ฌ; ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

gtk4๋Š” -mfpmath=sse๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@ianlancetaylor cflags์™€ ldflags์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ–๋Š” ๋Œ€์‹  ํ•˜๋‚˜์˜ ๋ชฉ๋ก๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? gcc/llvm์€ ldflags๋ฅผ cflag๋กœ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋•Œ๋•Œ๋กœ C ๊ฐœ๋ฐœ์ž๊ฐ€ #25493 ๋˜๋Š” https://github.com/golang/go/issues/23749#issuecomment -379969818๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„, ์ด๋ฏธ ํ‹ฐ์ผ“์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์œผ๋‹ˆ #25493์— ๋ฌธ์„œํ™”๋œ protobuf์˜ "-D_THREAD_SAFE"๋ฅผ ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ https://golang.org/cl/115415 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. cmd/go: accept more safe CFLAGS/LDFLAGS

https://golang.org/cl/115435 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: [release-branch.go1.10] cmd/go: accept more safe CFLAGS/LDFLAGS

https://golang.org/cl/115436 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ๋ณ€๊ฒฝ: [release-branch.go1.9] cmd/go: accept more safe CFLAGS/LDFLAGS

์–˜๋“ค ์•„,
2018๋…„ 9์›” 4์ผ ํ˜„์žฌ ์ตœ์‹  ๋ฒ„์ „์˜ Go๋กœ bimg ๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์—†๋Š”๋ฐ ์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
๋ฌธ์ œ ์ฐธ์กฐ: https://github.com/h2non/bimg/issues/230
Go 1.10 ์ดํ›„๋กœ bimg ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์–ด๋–ค ๊ฒƒ๋„ ๋นŒ๋“œํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ฌธ์ œ๋Š” Go 1.11์—์„œ ์—ฌ์ „ํžˆ ์ง€์†๋ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ๋ฐ›๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# go build
go build gopkg.in/h2non/bimg.v1: invalid flag in pkg-config --libs: -Wl,--export-dynamic

์–ด๋–ค ์กฐ์–ธ?

ํŽธ์ง‘ํ•˜๋‹ค:
์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค: https://github.com/golang/go/issues/27496

๋‚˜๋Š” ์ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋‹ค์Œ์— ์ฑ…์ž„์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค: https://github.com/alexflint/gallium/issues/63

@alexflint ์ด ๋ฌธ์ œ๋Š” ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰