Как перекрестно скомпилировать библиотеку C из Windows в Linux? (C 17) С использованием VS 2019

#c #linux #static-libraries #cross-compiling

#c #linux #статические библиотеки #перекрестная компиляция

Вопрос:

У меня есть библиотека C , и мне нужно создать .a . Я использую a .lib для сборки Windows моего проекта и нуждаюсь в a .a для сборки Linux.

VS говорит, что может сделать это с помощью проекта CMake, но я не смог ничего создать из документации (https://docs.microsoft.com/en-us/cpp/linux/cmake-linux-configure?view=msvc-160 ).

Когда я создаю .lib , я использую cmake для создания решения Visual Studio. Затем я использую MSVC 2019 для создания .lib.

РЕДАКТИРОВАТЬ: мой текущий CMakeLists.txt для библиотеки Windows.

 cmake_minimum_required (VERSION 3.9)

add_definitions(-DNOT_USING_CMAKE=0)

SET(CMAKE_INSTALL_PREFIX "..." CACHE PATH "...")

project(...)

include_directories (...)

#create base library
add_library (${PROJECT_NAME} STATIC "")

set_target_properties (${PROJECT_NAME}
  PROPERTIES
  CXX_STANDARD 17
  CXX_STANDARD_REQUIRED ON
  CXX_EXTENSIONS OFF
)

add_subdirectory (...)
...
add_subdirectory (...)

  install (TARGETS ${PROJECT_NAME}
         RUNTIME DESTINATION bin
         LIBRARY DESTINATION lib
         ARCHIVE DESTINATION lib/archive )
           
 

Комментарии:

1. В этом вопросе запрашиваются рекомендации для систем сборки, которые будут более или менее основываться на мнениях, потому что вариантов так много. Я бы рекомендовал ознакомиться с документацией CMake по созданию статической библиотеки, если вы открыты для использования CMake. cmake.org/cmake/help/latest/command/add_library.html

2. @OmnipotentEntity Я на самом деле не прошу рекомендаций для систем сборки, я просто говорю, что я открыт для решений, использующих разные системы. Я использую cmake и msvc, чтобы помочь мне создать . библиотека, но я не знаю, что потребуется для создания. a в Windows.

3. Решение состоит в том, чтобы выбрать систему и написать код системы сборки, необходимый для компиляции вашего .a файла. К сожалению, эта тема слишком сложная и широкая, чтобы ее можно было рассмотреть в ответе любым разумным способом. Существует много ресурсов о том, как использовать CMake для компиляции статической библиотеки в самых общих чертах. У вас есть конкретный вопрос относительно этого процесса?

4. @OmnipotentEntity, я не думаю, что создание библиотеки слишком сложно, чтобы ответить на один вопрос. Например, я добавил приведенный выше файл, который создает решение VS, которое я могу создать, создающее .lib. Насколько я понимаю, вы не можете просто создать статическую библиотеку Linux в Windows с помощью cmake, потому что cmake использует свою операционную систему для контекста. Я знаю, что Microsoft рекламирует, что VS может скомпилировать с помощью cmake. Я знаком с документацией ( docs.microsoft.com/en-us/cpp/linux /… ) и прочитал его.

5. @OmnipotentEntity Я изменил вопрос, чтобы спросить, как это можно сделать с помощью Visual Studio. Может быть, пример проекта, который кто-то где-то знает, может быть полезен.