Xcode: биткод не включается при выполнении Prelink с одним объектом

Я использую Xcode для предварительной компоновки набора объектных файлов (*.o) и статических библиотек (*.a), содержащих битовый код, в единую статическую библиотеку с использованием предварительной компоновки отдельных объектов.

При этом полученный предварительно связанный файл не содержит битового кода.

Команда и параметры предварительной компоновки, выдаваемые Xcode, выглядят следующим образом:

ld -r -arch arm64 -bitcode_bundle -bitcode_verify -syslibroot
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.6.sdk 
a.o 
b.o 
...
x.a
y.a
-o libABC-arm64-master.o

В документации для параметра bitcode_bundle указано, что он требует, чтобы все объектные файлы, статические библиотеки и пользовательские фреймворки/dylib содержали битовый код. Я использовал otool, чтобы убедиться, что все составляющие файлы содержат битовый код.

Никакие ошибки не возникают и не регистрируются командой ld, даже когда я тестирую ее непосредственно из командной строки, отдельно от Xcode.

Я в тупике. И любая помощь или предложения будут оценены.

Обновление. В ходе дальнейшего тестирования я могу создать предварительно связанный файл, содержащий только один файл .o, и окончательный предварительно связанный файл БУДЕТ содержать битовый код. Однако включение любых двух из этих .o файлов, каждый из которых содержит битовый код, приводит к тому, что предварительно связанный файл НЕ содержит битового кода.


person Bill Hollings    schedule 12.08.2020    source источник
comment
Вы пробовали тот же процесс на тонких объектах только с одной аркой? Я помню, что некоторое время назад у Apple была позиция вообще не поддерживать толстые библиотеки.   -  person Kikaxa    schedule 19.10.2020
comment
@Kikaxa Хорошее предложение. Последний код теперь генерирует файлы с одной архитектурой (фактически компоненты XCFramework), но результат тот же. Этап предварительной ссылки с одним объектом все еще, кажется, мешает бит-коду. Я отредактирую исходный вопрос, чтобы удалить ссылки на толстые файлы.   -  person Bill Hollings    schedule 19.10.2020


Ответы (1)


Вероятно, вам следует проверить раздел _LLVM в библиотеке результатов, а не _bitcode:

otool -l lib.a | grep _LLVM

https://stackoverflow.com/a/33105733/13891048

person Kikaxa    schedule 19.10.2020
comment
Спасибо. Вы правы в том, что если я уберу генерацию биткода, раздела __LLVM не будет. Странно, что в файлах, которые не предварительно связаны, есть разделы bitcode и __LLVM. - person Bill Hollings; 19.10.2020