Я поддерживаю среду с открытым исходным кодом, которая использует 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
, хотя есть вероятность, что какой-то внешний ресурс был изменен.
Если кто-либо сталкивался с такой или подобной проблемой, он может значительно помочь в диагностике и устранении проблемы. Поиск в Google этой конкретной проблемы 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, все тот же.