cmd/go์ ๋ํ ์ต๊ทผ ๋ณด์ ํจ์น(#23672)์๋ cgo์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์ต์ ์ ํ์ดํธ๋ฆฌ์คํธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ฌ๋ฌ ์ฌ๋๋ค์ด ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ์ต์ ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋์ ์คํจํ๋ ํจํค์ง๋ฅผ ๋ณด๊ณ ํ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ๋๋ฝ๋ ๋ชจ๋ ์ต์ ๋ชฉ๋ก์ ์์งํ์ฌ ๋จ์ผ CL์ ์ถ๊ฐํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
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
-fmodules
์ถ๊ฐ๋ฅผ ์ ์ํฉ๋๋ค. clang ์ปดํ์ผ๋ฌ๋ ์ฌ๋ฌ -fmodules
์ต์
์ ์ง์ํ์ง๋ง ๋ชจ๋ ์์ ํ์ง๋ ํ์คํ์ง ์์ต๋๋ค. ํนํ -fmodules-cache-path
๋ฐ -fmodules-user-build-path
๋ clang์ด ๋ชจ๋์ ์ฝ๋ ๋ฐ ์ฌ์ฉํ ๊ฒฝ๋ก ์ง์ ์ ํ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ, ์ด๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ปดํ์ผ ๋ชจ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.-Wl,--no-as-needed
์ถ๊ฐ๋ฅผ ์ ์ํฉ๋๋ค. ์ด์ ๋ํ CL์ด ์์ต๋๋ค: https://golang.org/cl/92795.-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 )
~~~
~~~
๋น๋ ์๋ ์ ์์ฑ:
~๋น๋ํ๋ค- 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 ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ํ์ต๋๋ค.
~~~
~~~
ํ์ง๋ง ๋ง์ปค๋ ๋ค๋ฅธ ์์น์์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ๊ณ ๋งํฌ ํ์ ์ค๋ฅ๊ฐ ์๋ ๋ฐํ์์ด ๋ฐ์ํฉ๋๋ค.
~~~
๋ฐํ์์...
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๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-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
-์ ์ -libgcc:
#cgo LDFLAGS์ ์๋ชป๋ ํ๋๊ทธ: -static-libgcc
-์ ์ -libstdc++:
#cgo LDFLAGS์ ์๋ชป๋ ํ๋๊ทธ: -static-libstdc++
ํ๋์ฝ๋ฉ๋ ์ ์ ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ ์๊ฐ์ ๋๋ค. ์๋ง๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์ค์ ์ด ์๋ ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํด์ผ ํ ๊ฒ์ ๋๋ค.
$GOROOT/bin/cgo.cfg
[ํ์ดํธ๋ฆฌ์คํธ]
๋ธ๋ผ๋ธ๋ผ๋ธ๋ผ
...
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฝ๊ฐ์ ์ฌ์ฉ์ ์ ์๋ฅผ ํ ์ ์์ต๋๋ค
@kruglinski CGO_CFLAGS_ALLOW ํ๊ฒฝ ๋ณ์ ๋ฐ ์น๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
@ianlancetaylor
์ฃ์กํฉ๋๋ค, ๋ฐฉ๊ธ ์ด๊ฒ์ ๋ํด ๋์ณค์ต๋๋ค. :-) ์๊ณ ๋ณด๋ ๋ฐ๊ฐ์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์๊ฐํฉ๋๋ค!
-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
์ด๋ฏธ ํ์ฉ ๋ชฉ๋ก์ ํฌํจ๋์ง ์์์ต๋๊น? ๊ทธ๊ฒ์ ๋ด๊ฐ ์์์ ์ธ๊ธํ ์ต์
์ผ๋ก ๋ฐํ์ก์ต๋๋ค.-D
A๋ฅผ -Wp
? ๋งคํฌ๋ก๋ฅผ ์ ์ฒ๋ฆฌ๊ธฐ์์๋ง ์ ์ํด์ผ ํ๋ ์ด์ ๊ฐ ์์ต๋๊น? Qt๊ฐ ์ฌ๊ธฐ์์ ์ด๋ค ์ข
๋ฅ์ ๋ถ๋๊ต๋ฅผ ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค... ์๋๋ฉด Qt ์์ฒด์์ ์ ๊ณตํ๋ ๊ถ์ฅ ์ต์
๋ชฉ๋ก์
๋๊น?@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 ์๋ฌธ์ผ๋ก ์ธํด
~~~
~~~
@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 ์ด ๋ฌธ์ ๋ ์ข ๋ฃ๋์์ต๋๋ค. ์ ๋ฌธ์ ๋ฅผ ๋ง๋์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ์๋ง๋ ๋ด๋ถ์ ์ผ๋ก ๋ ผ์๋์์ง๋ง ํจ์น ๋ฆด๋ฆฌ์ค์์ ๋๋ผ์ด ์ฌ์ค์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ ๊ตฌ๋ฉ์ ๋ง๊ธฐ ์ํด ๋จผ์ ๋ฌธ์ ๊ฐ ๋๋ ํ๋๊ทธ๊ฐ ๋ธ๋๋ฆฌ์คํธ์ ์ฌ๋ผ๊ฐ๊ณ 1.10์ ๋ํด ํ์ฑํ๋ ํ์ดํธ๋ฆฌ์คํธ ์์คํ ์ด ์์ ๊ฒ์ผ๋ก ์์ํ์ต๋๋ค. RC ๋์. ์ถ๊ฐ ํ๊ฒฝ ๋ณ์๋ ์ผ๋ถ ๋น๋ ์์คํ ์ ํตํฉํ๋ ๋ฐ ๊ทธ๋ค์ง ์ค์ฉ์ ์ด์ง ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ์ฌ๋๋ค์ด 1.9.3์ผ๋ก ๋๋์๊ฐ ์์ ํ ๋ณดํธ๋์ง ์๋ ๊ฒ์ ๊ด์ฐฐํ์ต๋๋ค. ์ด๋ ์ ์ ์ผ๋ก ์ญํจ๊ณผ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์์ผ๋์นด๋์ ์ ๊ท์์ผ๋ก ๊ฐ๋ ์ฐฌ ํ์ดํธ๋ฆฌ์คํธ๊ฐ ์์ฅ๋ ๋ธ๋๋ฆฌ์คํธ๊ฐ ๋๋ ์์ ์?