Изменение исходного файла, на который ссылается OBJ Files Сбои приложения?

Я работаю над проектом, в котором у меня есть исходные файлы, которые я могу редактировать (.cpp,.h) и объектные файлы, которые я не могу (.obj). Я пытаюсь добавить переменную в один из классов исходного файла. Он хорошо компилируется и связывается, но вызывает случайный сбой где-то в жизненном цикле приложения.

У меня такой вопрос: есть ли способ добавить переменные-члены в класс, находящийся в исходном файле, который связан с файлами OBJ и используется (без перекомпиляции файлов OBJ)?

Я понимаю, что вполне возможно, что я неправильно понимаю, в чем собственно проблема, но это мое лучшее предположение, поскольку я сталкивался с этим раньше и был бы признателен за ответы в ответ на мой вопрос. Это, конечно, если вы не уверены, что моя проблема в чем-то другом.

Вот немного предыстории: я работаю с кодом другого программиста. Они создали несколько синглетонов, используемых повсюду в базе кода. Я пытаюсь отделить определенную группу систем от всех синглетонов, используя сообщения, чтобы мне было легче управлять, модифицировать и наращивать системы. После добавления переменной в одно из синглетонов приложение каждый раз вылетает в одном и том же месте (чего я не вижу в исходном коде). В зависимости от того, какой тип переменной я добавлю, этот сбой произойдет в какой-то другой точке приложения. Я считал, что где-то в базе кода есть переполнение буфера, но у меня нет времени, чтобы заняться этой проблемой, и сначала я смотрю на другие более конкретные возможные причины.

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

Я бы опубликовал некоторый исходный код или отладочные стеки вызовов, если бы они были актуальны, но это не так. Вопрос в точности как заявлено. Я добавил переменную в класс. Теперь происходит сбой программы в какой-то случайной процедуре файла OBJ.

Спасибо за ваше время.

1 ответ

Решение

Если я правильно читаю ваш вопрос (у вас есть две разные версии одного типа в конечном исполняемом файле), то, что вы просите, приведет к неопределенному поведению во время выполнения.

Допустим, у вас есть структура с именем "foo", и она имеет два члена типа int, и ваш коллега-программист скомпилировал в отдельный объектный файл. Затем вы берете "foo", добавляете к нему член int и компилируете его в другой файл obj. Теперь вы связываете два файла obj, создавая исполняемый файл.

У вас две проблемы - какой размер (foo) во время работы программы? Это равняется уменьшенной версии или большей версии foo? Во-вторых, компоновщик, скорее всего, зарезервировал место для уменьшенной версии - что произойдет, когда программа попытается получить доступ к int, который вы добавили в большую версию foo? Произойдет перезапись или перезапись памяти.

Вы должны координировать свои усилия с вашими коллегами-программистами. Вы используете систему контроля версий? Если так, то это обычно, где эти проблемы устранены.

Другие вопросы по тегам