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

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

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

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

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

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

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

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

0

Решение

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

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]