#c #compilation #cross-platform #static-libraries #cross-compiling
#c #Сборник #кросс-платформенный #статические библиотеки #перекрестная компиляция
Вопрос:
Я хотел бы создать файл статической библиотеки в Windows, используя MSVC / IXX, совместимый с macOS и Linux.
Я использую C
(скажем C99
так), и функции действительно просты. Например:
void AddArray(float* mA, float* mB, float* mC, int numElements){
int ii;
for(ii = 0; ii < numElements; ii ){
mC[ii] = mA[ii] mB[ii];
}
}
Есть ли способ создать библиотеку только один раз в Windows и использовать ее везде?
Если не в Windows, можно ли это сделать в Linux и работать в Windows и macOS?
Идея состоит в том, чтобы скомпилировать один раз с помощью одного и того же компилятора и не использовать MinGW
, например, в Linux.
Ответ №1:
Это невозможно простым способом, который вы хотите (по одному файлу библиотеки для каждой ОС / компилятора), из-за того, что статические библиотеки представляют собой скомпилированный двоичный код, который неизбежно ссылается на специфику платформы и должен (в общем случае) быть в формате, специфичном для компилятора. Существует некоторый уровень совместимости между несколькими компиляторами в одной и той же ОС, но это никогда не будет работать в разных ОС. В Mac OS раньше была концепция двоичных файлов fat (в которых 32-разрядный и 64-разрядный двоичный код располагались рядом друг с другом), но поскольку они перешли исключительно на 64-разрядную версию, это больше не актуально (хотя они все еще существуют и все еще могут использоваться).
Если вы хотите распространять в двоичном виде, вам нужно будет предоставить разные двоичные файлы для каждой комбинации платформ (ОС / архитектура / набор инструментов), которую вы хотите поддерживать.