Ошибка компоновщика: неопределенная ссылка на `internal'
Я пишу приложение на D, которое взаимодействует с OpenGL и несколькими другими собственными библиотеками (используя библиотеки Derelict). Однако эта ошибка, похоже, не имеет к этому никакого отношения.
Всякий раз, когда я делаю "dub build", компиляция завершается успешно, но ld завершается с этим сообщением:
Linking...
../git/mango-engine/bin/libmango-engine.a(gl_model_503_284.o):(.data._D12mango_engine8graphics6opengl8gl_model7GLModel6__initZ+0x10): undefined reference to `internal'
../git/mango-engine/bin/libmango-engine.a(shader_51b_52f.o): (.data._D12mango_engine8graphics6shader13ShaderProgram6__initZ+0x18): undefined reference to `internal'
collect2: error: ld returned 1 exit status
Я понятия не имею, что это значит, и никогда не видел этого раньше. Также, как ни странно, эта ошибка возникает только тогда, когда я импортирую определенные файлы: gl_model.d и shader.d из другого проекта DUB. Если они не импортированы, компоновщик завершается успешно.
Я не уверен, какую информацию предоставить, поэтому я просто скомпоную весь исходный код здесь.
РЕДАКТИРОВАТЬ: эта ошибка возникает только при компиляции для x86_64. х86 работает нормально.
1 ответ
Я проследил это до двух строк в двух файлах (оба одинаковы):
private SyncLock lock = new SyncLock();
Где SyncLock - пустой класс, который я использую для "синхронизированных" блоков (не уверен, что это правильный способ сделать это). По какой-то причине, если я переместить инициализацию в конструктор, он работает нормально (без ошибок).