私は、継続的な統合にCircleCIを使用するオープンソースフレームワークを維持しています。私は最近、プロジェクトが急に奇妙な状況でビルドを拒否した壁に当たった。ネイティブ依存の "多重定義"リンカーエラーのため、ビルドに失敗します
Build 27が最後のものでした。その後、私は依存関係を少し変更し、ビルドに失敗したことに気付きました。私は成功せずにそれを修正しようとしたので、最後の作業設定and it still failedに戻りました。
障害の理由は、OpenGL(OpenGLRaw
)とGLFW(bindings-glfw
)という2つのネイティブCライブラリへのバインドの2つの依存関係です。彼らは多くの行とのリンク段階でエラーになります:
/tmp/ghc18975_0/ghc18975_6.o:(.data+0x0): multiple definition of `__stginit_bindizu0Qm7f8FzzUN32WFlos7AKUm_BindingsziGLFW'
/tmp/ghc18975_0/ghc18975_6.o:(.data+0x0): first defined here
私はなぜそれが起こる可能性があるか完全に困惑しています。これらのライブラリの正確な同じバージョンは元のビルドが成功したときにビルドされ、毎回新鮮なコンテナを使用するCI上にあります(私は明らかにキャッシュのクリーニングを試みました)。ビルドにはapt-get update
とcabal update
が含まれているため、外部リソースが変更されている可能性があります。
誰かがこのような問題に遭遇したことがある場合は、問題の診断と除去に大いに役立つ可能性があります。この特定のmultiple definition
スケールの問題に対するGoogleの検索では何も得られません。
私は(インターネット上でいくつかのヒントがそれを指摘しているため)秘密結社バージョンを更新しようとしましたが、と:
cabal-install version 1.22.6.0
using version 1.22.4.0 of the Cabal library
問題が解消されません。
私が言いたいことを忘れていたことの1つは、厳密には単純なパッケージミックスアップのようには見えないということです。私はSSH経由でそのボックスに接続し、そこに空のフォルダとサンドボックスを作成しました。同じような問題でも簡単にcabal install OpenGLRaw
が失敗しました。そのため、同じモジュールの2つのバージョンが競合する可能性はほとんどありません。
I've also extracted a verbose cabal installation log。
SSHは、OpenGLRawの生ソースをクローンしましたが、それでも同じですか? 7.6.3を試しましたが、まだ同じです。
私は(CircleCIでも)同じような問題がありますが、 'direct-sqlite-2.3.16'です。 – jpvillaisaza
運がいいですか? 'hslua'でも同じことが起こるようです。 https://github.com/commercialhaskell/stack/issues/1624およびhttps://github.com/osa1/hslua/issues/40を参照してください。 – jpvillaisaza
@jpvillaisaza私はできる限りどこにでもエスカレートしました。おそらくハスケルredditを除いて。賞金をここに置いて、最高のことを望む時間。 –