Смешивание статически скомпилированных exe различных версий библиотеки с общей памятью - PullRequest
0 голосов
/ 20 января 2010

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

Я отвечаю за поддержку системного программного обеспечения, написанного на «C», из которых у нас есть несколько общих библиотек «.a». У нас есть то, что я бы назвал «Менеджером выполнения», основной задачей которого является разветвление и выполнение списка переменных исполняемых файлов «test-job» и возврат управления обратно в Execution Manager после завершения процесса test-job. Все исполняемые файлы, включая диспетчер выполнения, статически связаны с вышеупомянутыми библиотеками. Менеджер выполнения и процессы тестового задания, которые он разветвляет, используют IPC через общую память. Одна из общих библиотек содержит функции-оболочки для создания и подключения общей памяти с помощью предварительно определенного ключа, который никогда не меняется.

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

Поскольку все исполняемые файлы были статически скомпилированы, я бы сказал, что смешивание диспетчера выполнения с тестовыми заданиями, статически скомпилированными для разных версий одной и той же общей библиотеки, не будет проблемой. Тем не менее, включение IPC через разделяемую память заставляет задуматься, правда ли это до сих пор. Моя интуиция говорит, что, пока не было никаких изменений в функциях обертки совместно используемой памяти, особенно в ключе, у нас все должно быть в порядке, но я мог бы действительно использовать некоторые экспертные мнения по этому поводу.

Спасибо, что нашли время прочитать это, очень признателен.

Ответы [ 2 ]

2 голосов
/ 20 января 2010

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

1 голос
/ 20 января 2010

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

...