Создайте статическую библиотеку в Windows, совместимую с macOS и Linux

#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-разрядную версию, это больше не актуально (хотя они все еще существуют и все еще могут использоваться).

Если вы хотите распространять в двоичном виде, вам нужно будет предоставить разные двоичные файлы для каждой комбинации платформ (ОС / архитектура / набор инструментов), которую вы хотите поддерживать.