Код: Выделить всё
MyLibОграничение:
Я должен распространять MyLib внутри компании среди других команд только как предварительно скомпилированный двоичный файл.
- Потребители не могут перекомпилировать MyLib из исходного кода.
- Если предварительно созданный двоичный файл, соответствующий их конфигурации, не существует, процесс должен завершиться неудачей, а не пытаться его создать.
- предоставляет доступ к сторонним библиотекам, например
Код: Выделить всё
MyLibвводит свой общедоступный API (заголовки).Код: Выделить всё
fmt - компилируется в статическую/общую библиотеку с использованием определенной версии fmt (например, v9.1.0) и определенных флагов компилятора.
Код: Выделить всё
MyLib - Потребительское приложение связывает MyLib через Conan. Конан получит MyLib (двоичный) и fmt (источник для сборки, если он недоступен или двоичный).
Даже если я заставлю Потребителя использовать тот же номер версии fmt (v9.1.0), меня беспокоят небольшие различия в том, как fmt построен на их основе. сторона. Если fmt скомпилирован с немного другими параметрами, расположение типов в моих заголовках в памяти не будет соответствовать предварительно скомпилированному двоичному файлу. Это может привести к неправильному отображению памяти и сбоям в автоматическом режиме.
**Пример сценария:
MyLib.h (Public Header)** Этот заголовок включается как в мою сборку библиотеки, так и в потребитель.
Код: Выделить всё
#pragma once
#include
namespace mylib {
struct LogContext {
// The size/alignment of this member depends on how fmt was compiled.
fmt::memory_buffer buffer;
};
void process(LogContext& ctx);
}
Код: Выделить всё
MyLibКод: Выделить всё
fmtКод: Выделить всё
package_idПотребительская среда: Потребитель просит Конана
Код: Выделить всё
MyLib. Они также используют fmtЕсли расположение памяти
Код: Выделить всё
fmt::memory_bufferКод: Выделить всё
process()Функция Код: Выделить всё
LogContextМои вопросы: Является ли вышеизложенное обоснованным беспокойством или у меня паранойя? Как другие справляются с подобными сценариями, если это серьезная проблема?
Подробнее здесь: https://stackoverflow.com/questions/798 ... arty-types
Мобильная версия