Нарушение прав доступа в модуле ilink32.dll

0

У меня есть гигантское решение C++ Builder 6, когда я пытаюсь его скомпилировать, я получаю следующую ошибку, когда компоновщик начинает свою работу:

Изображение 174551

Это означает:

---------------------------
Fehler
---------------------------
Access violation at address 0660EE22 in module 'ilink32.dll'. Reading from address 00000000.
---------------------------
OK   
---------------------------

Кто-нибудь есть идея, как это происходит и как я могу это исправить?

ИЗМЕНИТЬ 1

Важно отметить, что код иногда компилируется, в основном тогда, когда я перезагружаю рабочую копию, а затем просто изменяю материал в возвышенном тексте и использую C++ Builder только для компиляции. В том числе, я не открываю ни одного файла.

EDIT 2

Более подробная информация о проекте содержит около 80 000 000 строк кода (согласно C++ Builder). Самый большой файл - около 70 000 строк, но вы не можете сказать четко, потому что есть много

#ifdef XY
#endif

Вещи.

Сам код является копией с существующей частью и рассмотрен некоторыми сотрудниками. Поэтому я думаю, что это ошибка в C++ Builder, потому что она действительно работает, если я просто использую Sublime Text или Notepad++ для редактирования материала, а затем использую C++ Builder для его создания, он работает (по крайней мере иногда).

Честно говоря, я сам не думаю, что есть реальное решение. Но я надеюсь, что кто-то знает эту ошибку. Согласно Google, ilink32.dll - это библиотека C++ Builder, которая связана автоматически.

Возможно, у кого-то есть решение.

  • 0
    Так это ваша программа аварийно завершает работу или C ++ Builder?
  • 0
    @Drop Я получаю это сообщение о связывании. Так что я бы сказал C ++ Builder.
Показать ещё 15 комментариев
Теги:
linker
c++builder

1 ответ

1

В ilink32 всегда было много ошибок. Нет никаких шансов получить что-либо исправленное в не текущих версиях, поэтому ваши варианты:

  • Ищите обходные пути для QC
  • Найдите свой собственный обходной путь

Здесь есть некоторые поиски КК, которые могут или не могут быть полезны для вас.

AFAIK невозможно использовать другой компоновщик. Однако вы можете включить (или отключить) инкрементную привязку через параметры проекта и посмотреть, не изменилось ли это. Инкрементная привязка - это оптимизация скорости, она не имеет никакого отношения к семантике связывания.

проект содержит около 80 000 000 строк кода (согласно C++ Builder).

Ну, это число подсчитывает все строки в предварительно скомпилированных заголовках для каждого исходного файла, поэтому, возможно, это мало значит.

70K LOC большой для одного исходного файла; возможно, вы можете попробовать рефакторинг кода, чтобы иметь меньшие объектные файлы, особенно если кажется, что добавление большого файла вызывает проблему.

Возможно, вам удастся определить, какое изменение вы делаете, что вызывает ошибку. Например, это может привести к некоторому увеличению определенной вещи (например, размер одного объектного файла, количество объектных файлов, размер статических данных и т.д.),

Вы можете удалить предварительно скомпилированные файлы заголовков (это vclNN.csm, vclNN. # 00, vclNN. # 01 и т.д.), Которые по умолчанию создаются и сохраняются в каталоге lib BCB6. Возможно, они испорчены или могут быть перестроены лучше. В любом случае управление PCH затруднено в BCB6. (Я в конечном итоге определил свой собственный "all.h" и каждый исходный файл сделал #include "all.h" #pragma hdrstop). Более поздние версии CBB XE позволяют делать инъекции PCH, делая этот процесс намного более аккуратным.

Посмотрите на фактическую ссылку, передаваемую в ilink32, и посмотрите, нет ли в ней ненужных объектных файлов или библиотек. Вы можете удалять и воссоздавать файлы проекта, поскольку они могут нарастать с течением времени по мере разработки проекта. На самом деле это, вероятно, хорошая идея.

Другая возможность может заключаться в том, чтобы сгруппировать часть кода в статические библиотеки.

Во всех случаях убедитесь, что вы используете хороший источник контроля, чтобы вы могли отменить все неудачные варианты, которые могут ухудшить ситуацию

  • 0
    Спасибо :) к настоящему времени это сработало, когда я отменил изменения в файле проекта в svn, а затем пересобрал все. Это работает обычно. Проблема в том, что нам не разрешают реактировать код. В противном случае большие файлы были бы намного меньше: / Я попробую ваши идеи завтра :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню