我维护了一个使用CircleCI进行持续集成的开源框架。最近在相当奇怪的情况下,项目突然无法构建。
第27次构建是最后一次成功的。之后,我对依赖关系进行了一些微小的更改,并注意到构建失败了。我试图修复它,但没有成功,所以我回滚到了上一个工作配置但仍然失败了。
失败的原因是两个依赖项,都是本地C库的绑定:OpenGL (OpenGLRaw
)和GLFW (bindings-glfw
)。它们在链接阶段出错,有大量的报错信息:
/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
问题进行谷歌搜索没有任何结果。
我尝试更新 cabal 版本(因为一些互联网上的提示指向它),但是出现了:
cabal-install version 1.22.6.0
using version 1.22.4.0 of the Cabal library
问题仍然存在。
我忘记提到的一件重要的事情是,这看起来并不像是简单的软件包混淆。我通过SSH连接到那个盒子,在那里创建了一个空文件夹和一个沙盒,即使是简单的
cabal install OpenGLRaw
也会出现相同的问题(因此不太可能会引入两个版本的相同模块,导致这些冲突)。
我再次使用SSH克隆OpenGLRaw的原始源代码,但结果仍然相同。尝试了7.6.3版本,仍然没有改进。
direct-sqlite-2.3.16
有关。 - jpvillaisazahslua
似乎也遇到了同样的问题。请参见 https://github.com/commercialhaskell/stack/issues/1624 和 https://github.com/osa1/hslua/issues/40。 - jpvillaisaza-v3
ghc 选项,并再次发布构建日志以查看ghc
在这里的确切操作。我敢打赌,它与--dynamic-too
搭配使用会很混乱。 - Yuras