Сам исполняемый файл компилируется и компонуется нормально, пока я не добавлю статическую зависимость от 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
Код: Выделить всё
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)
Код: Выделить всё
add_compile_options(-msse2)
Что я пытаюсь понять
- Почему _mm_setr_epi16 остается неопределенным при компиляции для x86_64, где должен быть гарантирован SSE2?
- Это это:
- отсутствует флаг компилятора?
- опция сборки SDL?
- проблема с профилем Конана?
- известная особенность clang + MSVC ABI при кросс-компиляции?
- Каково правильное минимальное исправление при использовании:
Код: Выделить всё
clang --target=x86_64-pc-windows-msvc
Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-on-maco
Мобильная версия