Go: cmd / gocgoホワむトリストにないオプション

䜜成日 2018幎02月08日  Â·  138コメント  Â·  ゜ヌス: golang/go

cmd / goの最近のセキュリティパッチ23672は、cgoでの䜿甚が蚱可されおいるオプションのホワむトリストを远加したした。 ホワむトリストにないオプションを䜿甚しおいるため、デフォルトでビルドに倱敗するパッケヌゞがいく぀かの異なる人々から報告されおいたす。 この問題は、䞍足しおいるすべおのオプションのリストを収集しお、それらを1぀のCLに远加できるようにするこずを目的ずしおいたす。

FrozenDueToAge release-blocker

最も参考になるコメント

すべおのコンパむラおよびリンカなどオプションが䜕らかの理由で存圚し、ホワむトリストは特に危険ず芋なされるものを陀いおそれらすべおをカバヌする必芁があるず想定するのは合理的ではありたせんか 明らかにそれらは䜕癟もあり、ホワむトリストの保守は面癜くありたせんが、それが決定された道である堎合...

これはおそらく瀟内で議論されおいたすが、パッチリリヌスでは驚くべきこずがわかりたした。コンパむラプラグむンの穎を塞ぐために問題のあるフラグが最初にブラックリストに登録され、リストが䜜成された可胜性のある1.10に察応したホワむトリストシステムが有効になっおいるず予想しおいたした。 RC䞭にアップ。 䜙分なenv倉数を䞀郚のビルドシステムに統合するのは実甚的ではありたせん。これにより、人々が1.9.3に戻っお完党に保護されなくなり、完党に逆効果になるこずがわかりたした。

ワむルドカヌドず正芏衚珟でいっぱいのホワむトリストが倉装したブラックリストになるのはどの時点ですか

党おのコメント138件

23737は、 pkg-config -libsによっお生成されたフラグがコンパむラのホワむトリストずCGO_CFLAGS_ALLOWに察しおチェックされおいるこずを報告したすが、代わりにリンカヌのホワむトリストずCGO_LDFLAGS_ALLOWに察しおチェックする必芁がありたす。 これを修正するCLがありたす //golang.org/cl/92755。

リンカホワむトリストは、 .a .o 、 .soなどのファむルをすでに受け入れおいるため、 .aファむルを受け入れる必芁がありたす。 これを修正するCLがありたす //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がありたす //golang.org/cl/92795。

23744は、次のコンパむラオプションを远加するこずを提案しおいたす。

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

䞀重ダッシュたたは二重ダッシュのいずれかで䜿甚できるコンパむラおよびリンカのオプションは倚数ありたす。 ホワむトリストでも同様に緩いはずです。

盎亀性の堎合 -frameworkの怜玢パスにディレクトリを远加するオプションがすでにカバヌされおいるかどうかを忘れおいたす。 それがどんな遞択肢なのかも忘れおしたいたした。 私が考えるこずができる兞型的なナヌスケヌスは/Library/Frameworks 。これは、Appleがアプリ固有のフレヌムワヌクを配眮する堎所であり、デフォルトでは怜玢されたせん。

たた、 -as-neededはそもそもcgoで安党に䜿甚できたすか このブログ投皿「gccas-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倉数を通過したす。

ただし、 CGO_LDFLAGS_ALLOWをチェックする必芁があるずきに、 pkg-config -libsがCGO_CFLAGS_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は、 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ヒットしたす。

この問題は、cgoLDFLAGSの「$ {SRCDIR} /file.o」で発生したした。

リンカヌ入力であるプレヌンファむル名を蚱可する必芁があるこずを䞻匵したいず思いたす
LDFLAGS内のファむル
少なくずも* .a、*。o、および* .so。

理論的には「-L $ {SRCDIR}」で凊理できる.aや.soずは異なりたす
-lname」、远加
リンカコマンドぞの䜙分なオブゞェクトファむルは、そのように修正するこずはできたせん。

回避策はCGO_LDFLAGS_ALLOWを蚭定するこずですが、これは非垞に面倒です。
別
別の方法は、file.oの名前をfile.sysoに倉曎するこずですが、特定の目的のために
堎合、䜿甚できたせん
このオプションは、特定のビルドタグが
含たれおいたす
ビルドタグは、cgo LDFLAGSプリアンブルを含むファむルに適甚されたすおよび
道はない
sysoファむル名に任意のビルドタグを蚭定したす。

以前にデプロむされたGoバヌゞョンを無芖するず、
新着
リンカにファむルを远加するために特別に蚭蚈された「#cgoLDLIBS」
コマンドラむン。
次に、LDLIBSに察しおより厳密なルヌルを蚭定できたすファむル名のみ、ダッシュなし
プレフィックスで蚱可されたす。

--std=c99これをヒットしたした

-std = c ++ 11

-std =だず思いたすホワむトリストに登録する必芁がありたすか

おそらくホワむトリストに茉っおいたす -fopenmp

Gov1.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 

以前は

#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で、リンク先の.aアヌカむブをリンカヌに具䜓的に指瀺しおいたしたここでは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

~~~

構築しようずするず生成されたす

〜ビルドするgo build -ldflags "-X main.LastGitCommitHash = 30259813c10c0f6b63768b4f35358828e2e29f0b -X main.BuildTimeStamp = 2018-02-09T224948 + 0700 -X main.GitBranch = master -X main.NearestGitTag = v0.9.6 -X main.Go = go_version_go1.9.4_darwin / amd64 "-o gigo build 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

SIGTRAPトレヌストラップ
PC = 0x7fff66ff4075 m = 0 sigcode = 1
cgoの実行䞭にシグナルが到着したした
~~~
/usr/local/lib/libluajit-5.1.2.dylibは必芁なラむブラリではありたせんが、動的にリンクされおいたす。 むしろ、$ {SRCDIR} /../../../ LuaJIT / LuaJIT / src /libluajit.aで指定されたものでなければなりたせん。

したがっお、ただ回避策を探しおいたす。

曎新これを私のmakefilesに远加するずうたくいくようです。
〜゚クスポヌトCGO_LDFLAGS_ALLOW = "$ {GOPATH} /src/github.com/gijit/gi/vendor/github.com/glycerine/golua/lua/../../../LuaJIT/LuaJIT/src/libluajit.a ";〜

曎新ありがたいこずに、Ianは、より短い正芏衚珟バヌゞョンで十分であるず指摘したした。
〜export CGO_LDFLAGS_ALLOW = "。*。a";〜

-Wl、-フレヌムワヌクずは䜕ですか それが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はい、この問題のポむントは、ホワむトリストに加える必芁のあるすべおの倉曎を収集するこずです。 確かに、.aファむルをホワむトリストに登録したす。

-fstack-protectorも远加しおいただけたすか

ありがずう 

ホワむトリスト-static-libstdc++をお願いしたす。

パッケヌゞgithub.com/flynn/hidは、ダヌりィンのLDFLAGSを介しお-fconstant-cfstringsを枡すため、1.9.4でビルドできたせん。

これらのリンカヌフラグをホワむトリストに远加しおください
-Wl、-Bstatic
-Wl、-Bdynamic
-Wl、-start-group
-Wl、-end-group

正盎なずころ珟時点では、悪いオプションのブラックリストは、そのような広範なホワむトリストよりも圹立぀ように思われたす。

今埌、ブラックリストは、安党でない可胜性のある新しいコンパむラオプションが導入された堎合、すべおのGoリリヌスがそのオプションに察しお脆匱になるこずを意味したす。 この皮の攻撃から完党に保護できる範囲で、ホワむトリストにする必芁があるず思いたす。

いく぀かの新しい朜圚的に安党でないコンパむラオプションが導入されたした

私はただブラックリストが望たしいず思いたす。 それは䞡方の道を切るからです。 ホワむトリストに登録されるたで新しいコンパむラオプションを利甚できない堎合は、新しいCコンパむラがフラグを远加するたびに新しいGoリリヌスが必芁になるようです...

@glycerineそのため、環境倉数を゚スケヌプハッチずしお提䟛しおいたす。 ホワむトリストが曎新されるたで、い぀でも環境倉数を䜿甚できたす。

問題は、玔粋に「goget」を介しおむンストヌルされたプロゞェクトでは環境倉数が機胜しないこずです。

別のアプロヌチgoプロゞェクトずいう名前のトップレベルが環境倉数を蚭定できるようにしたす。

次に、むンストヌルされおいるプラ​​むマリの「go build」プロゞェクトは、䟝存するプロゞェクトが任意のこずを実行するのを防ぎながら、たずえば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䞭にアップ。 䜙分なenv倉数を䞀郚のビルドシステムに統合するのは実甚的ではありたせん。これにより、人々が1.9.3に戻っお完党に保護されなくなり、完党に逆効果になるこずがわかりたした。

ワむルドカヌドず正芏衚珟でいっぱいのホワむトリストが倉装したブラックリストになるのはどの時点ですか

gomobileはフラグ-fobjc-arc-fmodules-fblocksを䜿甚したす。

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

-flto

次のアップデヌトが出るたでの抂芁のために、この号の䞊郚に「承認枈み」のリストをアルファベット順に䞊べおいただけたすか CLを提出する人は誰でも、それを高く評䟡するかもしれたせん。

今特にこの問題が存圚するので私は䜕が亀裂をすり抜けおいるのかに぀いおもっず心配しおいたす最初に私たちに盞談せずに人々がプロゞェクトから削陀したビルドフラグは䜕ですかcgoそしおひいおはGoが壊れおいるずいう誀った信念を圌らに䞎えたすバグがあり、リグレッションがあり、その開発者は圌らが䜕をしおいるのかわかりたせん。 Sか悪いか、あなたがやっおいるずあなたが䟝存XYZを逃す䞀぀ですので、明らかに、私のパッケヌゞが間違っを構築しおいるかわかりたせん

「この問題を参照」リンクの䞀郚には、この問題にはただ適切ではない、より倚くのブラックリストに登録されたフラグがリストされおいたす。 私はたた、特に重耇を防ぐために、マスタヌリストを䞀番䞊に眮くこずを保蚌したす。 人々はただ静的アヌカむブの問題に盎面しおいたす...

これは、gccずclang自䜓が、a私たちのために汚い仕事をするb将来の倉曎に察しお回埩力があり、c別の人がオフにできないオプション--no-unsafe-optionsを提䟛できるか、あるいは提䟛すべきかどうか疑問に思いたすオプション䞀床そこにあるず、そこにある、期間。 それずも、 go getは、この皮のフィルタリングが必芁な最初で唯䞀の状況ですか

ホワむトリストを䞻匵する堎合、入力を埅぀のに遅延が必芁な理由がわかりたせん。

コンパむラはフラグを文曞化したす。 誰かが䞊で蚀ったように、それぞれの旗は理由のためにそこにありたす。

䜿甚法に関するナヌザヌの入力を埅぀こずによるサンプリングは、代衚的ではなく、信頌性が䜎く、将来、珟圚実珟たたはサンプリングされおいないフラグの必芁性を芋぀けた私たち党員にずっお苊痛な結果を生み出したす。

さらに、この手順で疑䌌コヌドでホワむトリストを導出するのは簡単なようです。

すべおのC / C ++コンパむラずサポヌトされおいる各コンパむラのバヌゞョンを䞀芧衚瀺したす。
コンパむラバヌゞョンごずに、ドキュメントから入手できるすべおのフラグを䞀芧衚瀺したす。
フラグごずに、それをホワむトリストたたは非衚瀺のブラックリストに入れるこずを決定したす。

蓄積されたホワむトリストのすべおのフラグにホワむトリストコヌドを远加したす。

1぀たたは2぀の脆匱なフラグをブラックリストに茉せるのず比范しお、これはただクレむゞヌだず思いたすreductio ad absurdumに集䞭しおいたす。 しかし、真面目な話ずしお、ホワむトリストを䞻匵する堎合、䞊蚘のアルゎリズムは正しく、圓お掚量を排陀し、遅滞なく実行できたす。 おそらく、必芁な远加のナヌザヌ入力は、サポヌトするコンパむラ/バヌゞョンの範囲を確立するこずだけです。

ここで重芁な唯䞀のオプションは、.goファむルの#cgo CFLAGSたたは#cgo LDFLAGS行に配眮するのに合理的なオプション、たたはpkg-config --cflags呌び出しから出力するのに合理的なオプションです。 pkg-config --libs 。 これは、コンパむラオプションの総数の小さなサブセットです。

たた、gccずclangのオプションの数を倧幅に過小評䟡しおいたす。 ゜ヌスコヌドであっおも、それらがすべお文曞化されおいるずは思えたせん。実行時に生成されたものがあったずしおも、驚くこずではありたせん。 たた、タヌゲットがトリプルに䟝存するオプションがあるかもしれたせん...これは、安党なフラグの正芏リストをgccおよびclang開発者が維持する必芁があるず私が蚀う理由でもありたす。

ただし、個々のフラグのパッチ適甚の遅延に぀いおは䜕も蚀えたせん。

@anacrolix Over23672で、 -Wl,-frameworkをホワむトリストに登録する必芁があるず提案されたした。 ただし、通垞、 -frameworkにはオプションがありたす。 正確な䜿甚䟋を瀺しおいただけたすか ありがずう。

たた、gccずclangのオプションの数を倧幅に過小評䟡しおいたす

@andlabsIanはgcc開発者です。 圌はよく知っおいるず確信しおいたす。

倉曎https://golang.org/cl/93836はこの問題に蚀及しおいたす cmd/go: add options to security whitelist

䞊蚘のすべおのオプションをカバヌしおいるず思うCLを送信したした https 

問題が発生した堎合、たたはナヌザヌが䜿甚しおいるオプションでカバヌされおいないものを知っおいる堎合は、お知らせください。 ありがずう。

LLVM Goバむンディングの芳点から、次のリンカヌオプションがホワむトリストに含たれおいる必芁がありたす。

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

リンカオプションはコマンドllvm-config --ldflagsによっお生成され、出力に含たれたす。

参照 https 

@ 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がどこから来おいるのかわかりたした

特定の参照 https://gitlab.gnome.org/GNOME/glib/blob/master/glib-2.0.pc.in#L14 @INTLLIBS@取埗-Wl,-framework -Wl,CoreFoundationからhttps//でgitlab .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

@calmhhttps//golang.org/cl/94018で別のアプロヌチを詊しおいたす。

@andlabsありがずう、

私はSDLを静的にリンクしおおり、pgkconfigには-Wl,--no-undefinedずプリプロセッサ定矩が含たれおいたす。

ホワむトリストの䞋にフラグを远加しお、cgoemitterパッケヌゞを䜿甚するプロゞェクトをコンパむルできるようにする必芁がありたす。

go build github.com/supermock/cgoemitter-demo/x#cgo LDFLAGSの無効なフラグ-Wl、-unresolved-symbols = ignore-all

事前にどうもありがずうございたした

CLを再床曎新したす。

この問題を説明するwikiペヌゞをhttps://golang.org/wiki/InvalidFlagに远加し、゚ラヌメッセヌゞがナヌザヌに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問題を修正する必芁がありたすか 自䜜から最新バヌゞョンをプルダりンしたしたが、ただ衚瀺されおいたす。

➜  ~ 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

ちょうど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 windows LDFLAGS-O3 -L./ -lmass -static-libgcc -static-libstdc ++

cgo linux LDFLAGS-O3 -L./ -lmass -ldl -lm -lrt -static-libgcc -static-libstdc ++

cgo CFLAGS-O3

#cgo LDFLAGSの無効なフラグ-O3

-static-libgcc

cgo windows LDFLAGS-L./ -lmass -static-libgcc -static-libstdc ++

cgo linux LDFLAGS-L./ -lmass -ldl -lm -lrt -static-libgcc -static-libstdc ++

#cgo LDFLAGSの無効なフラグ-static-libgcc

-static-libstdc ++

cgo windows LDFLAGS-L./ -lmass -static-libstdc ++

cgo linux LDFLAGS-L./ -lmass -ldl -lm -lrt -static-libstdc ++

#cgo LDFLAGSの無効なフラグ-static-libstdc ++

ハヌドコヌドされた静的ホワむトリストを䜿甚するこずは悪い考えです。おそらく、次のようないく぀かのデフォルト蚭定で構成ファむルを䜿甚する必芁がありたす。

$ GOROOT / bin / cgo.cfg
[ホワむトリスト]
かくかくしかじか
..。

カスタマむズできるように

@kruglinskiCGO_CFLAGS_ALLOW環境倉数ずその仲間を䜿甚しおカスタマむズできたす。

@ianlancetaylor

申し蚳ありたせんが、私はこれに぀いお芋逃したした:-)知っおおくず、倚くの人が考えおいたす

24124は、次のリンカヌオプションを報告したす。

-Wl,-z,relro

リンカオプション-Wl,--subsystem,windowsずコンパむラオプション-mwindows䞡方がありたせん。

gomobile / gobindにスタンドアロンバむンディングを生成させようずしおいたす。 その䜜業の䞀郚には、CGO_ * FLAGS環境倉数を#cgoディレクティブに倉換するこずが含たれたす。これにより、さらにいく぀かのフラグが明らかになりたした。

「」
-isysrootios
-mios-simulator-version-min =ios
-miphoneos-version-min =ios

-目暙アンドロむド甚
--sysrootアンドロむド甚
-gcc-ツヌルチェヌンアンドロむド甚
「」

最埌の-gcc-toolchainを陀いお、ホワむトリストに安党に远加できるず思いたす。

macOSでCGO_LDFLAGS_ALLOWを䜿甚せずに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 Go1.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はリストにあるcflagであり、ldflagではありたせん。なぜldflagに入れるのですか

より倚くのホワむトリストリク゚ストを収集するために再床開きたす。

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を-Wp守っおいるのですか マクロを定矩する理由はありたすが、プリプロセッサのみにありたすか ここでQtがどのようなブヌドゥヌを行うのかわかりたせん...それずも、これはQt自䜓が提䟛する掚奚オプションのリストですか
  • @ianlancetaylorぞ新しいオプションを1.9にバックポヌトしないこずはある皋床理解できたすがGoバヌゞョンの䜿甚状況メトリックがないため、この問題に぀いおは曖昧です、1.12がリリヌスされるたで1.10を䜿甚しないのはなぜですか
  • 䞊蚘の答えに関係なく、そこにリストされおいるARMABIオプションをバックポヌトする䟡倀があるかどうか疑問に思いたす...

@andlabsい぀か停止する必芁があるずいう理由だけで、今すぐ停止したせんか しかし、パッチが十分に圹立぀ず思われる堎合は、パッチをバックポヌトし続けおも問題ありたせん。

@andlabsはい、これらはすべお掚奚フラグです。 私はそれらの1぀を自分で手動で远加したせんでした。
-Wp,-D_FORTIFY_SOURCE=2は、バショりカゞキのタヌゲットiircからのもの

その堎合、 @ therecipeは、QtずSailfishがそれらの提案をどこで行いたすか぀たり、それらを提䟛するWebペヌゞたたはCLIツヌルはありたすか 私は今興味がありたす。

それたでの間、そのリストはGoチヌムによっお察凊されおいたすが、 -Wl,プレフィックスを削陀するず、LDFLAGSの譊告がいく぀消えるか疑問に思いたす。 それを詊しおみおください 1぀のCFLAGSの-Wp,プレフィックスに぀いおも同じです。 これがビルドに悪圱響を䞎えるかどうかはわかりたせんが、それがLDFLAGSの目的であるため、理想的な䞖界で-Wx,オプションは基本的に、匕数を自分で凊理するのではなく、リンカヌたたはアセンブラヌたたはプリプロセッサヌに盎接送信するようにgccずclangに指瀺したす。正しく掚枬しおいる堎合、アむデアはgccによっおただ提䟛されおいないOS固有のオプションです。盎接鳎りたすが、よくわかりたせん...

@andlabsええ、Qtのビルドツヌルの1぀qmakeは、 *.pro 、 *.spec mkspec、 *.conf 、およびその他の倚くの圢匏を䜿甚しお、通垞のMakefileを生成したす。 ダミヌの*.proファむルをいく぀かフィヌドし、Makefileからフラグを抜出したす。 そうすれば、䟝存関係を自分で解決する必芁はありたせん。サヌドパヌティのラむブラリを䜿甚するずビルドプロセスが簡単になりたす。cたたはldフラグずテストされおいないタヌゲットを手動で管理したり、Qtの新しいバヌゞョンや叀いバヌゞョンを管理したりする必芁はありたせん。ほずんどの堎合、箱から出しおすぐに䜿甚できたす。 たたに問題の原因ずなるフラグをブラックリストに登録する必芁がありたすが、それは非垞にたれです。

-Wp,-D_FORTIFY_SOURCE=2匕き蟌むセむルフィッシュmkspecを芋぀けようずしたしたが、おそらくmersdkかそこらのどこかに埋もれおいたす。 ただし、TQtCがサポヌトを維持しおいるタヌゲットの公匏リストは次のずおりです。https 

その間、バむンディング goをラップするで䜿甚されるビルドツヌルでそれらをホワむトリストに登録できたすが、 go build ...を䜿甚したいだけの通垞のGoナヌザヌは、遅かれ早かれ問題を匕き起こしたす。 。少なくずもデスクトップタヌゲットの堎合

-ffast-math

公匏のSAPHANAクラむアントドラむバヌ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/fba20e31f75c4f7ca5629083869069e5.htmlq = golang20driverのSAPドキュメントも参照しおください。

@ cbgo 

フラグず匕数のペアをリンカに枡すコヌドでは、2぀ではなく1぀の-Wlフラグを䜿甚する必芁がありたす。cgoLDFLAGSではなく#cgo LDFLAGS-Wl、-rpath、$ ORIGINを䜿甚しおください-Wl、-rpath -Wl、$元。

@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master$ make runcd chez_scheme_9.5.1 / c;








https://github.com/go-interpreter/chezgo/blob/master/embed.go#L10のcgoプリアンブルが原因
~~~

cgo LDFLAGS-liconv -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厄介な回避策がある堎合でも、盞察パスはリンク可胜である必芁があり、それは明らかにバグです。

それは、IIRCを陀いお、リンクが゜ヌスディレクトリに察しお盞察的であるずいう保蚌はありたせん $WORKにある可胜性が非垞に高く、その埌、盞察パスが再び壊れたす...繰り返したすが、忘れおしたいたした歎史; 他の誰かが説明する必芁がありたす。

gtk4は-mfpmath = sseを䜿甚したす

@ianlancetaylor cflagsずldflagsに別々のホワむトリストを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 
Go 1.10以降、 bimgをむンポヌトするものをビルドするこずはできたせんが、Go1.11でも問題が解決したせん。
衚瀺される゚ラヌメッセヌゞは次のずおりです。

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

䜕かアドバむスはありたすか

線集
新しい問題を䜜成したした https 

このホワむトリストは次の責任があるず思いたす https 

@alexflintこの問題は解決されたした。新しい問題を䜜成しおください

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡