Я пытаюсь скомпилировать несколько библиотек с открытым исходным кодом для iOS в виде общих библиотек с битовым кодом. Я добавил флаг -fembed-bitcode
в CFLAGS и LDFLAGS. Компиляция завершается нормально, но некоторые из полученных библиотек (например, curl) не содержат битового кода (я проверил это с помощью otool -l lib.dylib | grep LLVM
).
Мое исследование показывает, что флаг -fembed-bitcode
просто исчезает из командной строки компоновщика при линковке dylib, хотя в Makefile в этом месте напрямую используется LDFLAGS. Как можно убрать -fembed-bitcode
из LDFLAGS?
Причина исчезновения флага -fembed-bitcode
заключается в том, что библиотека использует libtool для компоновки и по умолчанию использует неизвестные флаги полоски:
When creating a shared library, but not when compiling or creating a program, libtool drops some flags from the command line provided by the user. This is done because flags unknown to libtool may interfere with library creation or require additional support from libtool, and because omitting flags is usually the conservative choice for a successful build.
If you encounter flags that you think are useful to pass, as a work-around you can prepend flags with -Wc, or -Xcompiler to allow them to be passed through to the compiler driver (see Link mode). Another possibility is to add flags already to the compiler command at configure run time:
./configure CC='gcc -m64'
Поэтому я просто добавил флаг -Wc,-fembed-bitcode
в LDFLAGS в дополнение к -fembed-bitcode
и компиляциям библиотеки с битовым кодом.