Кросс-компиляция статической библиотеки SDL3 для Windows (x86_64-msvc) с clang в macOS завершается с ошибкой с неопределC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Кросс-компиляция статической библиотеки SDL3 для Windows (x86_64-msvc) с clang в macOS завершается с ошибкой с неопредел

Сообщение Anonymous »

Я выполняю перекрестную компиляцию исполняемого файла графического пользовательского интерфейса Windows x64 на macOS (Apple Silicon) с использованием LLVM clang, ориентированного на MSVC ABI, с помощью CMake + Conan 2.
Сам исполняемый файл компилируется и компонуется нормально, пока я не добавлю статическую зависимость от SDL3, созданную с помощью Conan. Затем связывание завершается неудачно из-за неопределенной встроенной функции SSE, поступающей из SDL.
Я был бы признателен за некоторые рекомендации о том, какой уровень здесь отвечает (флаги компилятора, профиль Conan, параметры сборки SDL или взаимодействие clang/MSVC ABI), и каков правильный способ решения этой проблемы.

Хост-система
  • macOS (Apple Silicon, Arm64)
  • LLVM от Homebrew
  • Кросс-компиляция в Windows x64

Toolchain
  • Компилятор: clang++ (не clang-cl)
  • Цель: x86_64-pc-windows-msvc
  • Компоновщик: lld-link
  • Файл цепочки инструментов CMake: пользовательский windows-llvm.cmake
  • Conan 2 с явными профилями сборки/хоста

Вызов Conan

Код: Выделить всё

conan install . \
--profile:build=macos \
--profile:host=windows-x86_64-llvm \
--build=missing
Команда CMake link (отрывок)

Код: Выделить всё

clang++ --target=x86_64-pc-windows-msvc
-nostartfiles -nostdlib
-fuse-ld=lld-link
-Xlinker /subsystem:windows
-Xlinker /entry:WinMainCRTStartup
CMakeFiles/hello_gui.dir/win-main.cpp.obj
SDL3-static.lib
-lkernel32 -luser32 -lgdi32 ...
Ошибка компоновщика

Код: Выделить всё

lld-link: error: undefined symbol: _mm_setr_epi16
>>> referenced by SDL3-static.lib(SDL_stb.c.obj):(stbi__idct_simd)
Я уже пробовал явно включить SSE2:

Код: Выделить всё

add_compile_options(-msse2)
Применяется глобально через файл цепочки инструментов, поэтому он влияет как на SDL, так и на мой проект, а затем перестраивает и SDL3, и мой проект.
Что я пытаюсь понять
  • Почему _mm_setr_epi16 остается неопределенным при компиляции для x86_64, где должен быть гарантирован SSE2?
  • Это это:
  • отсутствует флаг компилятора?
  • опция сборки SDL?
  • проблема с профилем Конана?
  • известная особенность clang + MSVC ABI при кросс-компиляции?
  • Каково правильное минимальное исправление при использовании:

Код: Выделить всё

clang --target=x86_64-pc-windows-msvc
Я специально не использую clang-cl и хотел бы продолжать использовать clang + lld-link, если это возможно.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-on-maco
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»