Budując platformę do wykorzystania w projekcie Mac / TV / iOS postanowiłem zbudować platformę i na wszelki wypadek dołączyć kod bitowy. Jednak moja struktura wyjściowa nie zawiera kodu bitowego.
widze -fembed-bitcode
jest wywoływany w każdym pliku źródłowym, ale gdy sprawdzam .dylib
z otool -l library.dylib
nie ma __LLVM
Sekcje. Przechodząc do tworzenia biblioteki statycznej, widzę __LLVM
Sekcje.
Dlaczego właściwie nie buduje biblioteki?
Odpowiedzi:
0 dla odpowiedzi № 1Kluczem jest to, że biblioteka statyczna jest po prostuarchiwum plików obiektowych. Aby poprawnie zbudować bibliotekę dynamiczną, czy to w ramach, czy nie, musisz spojrzeć na ostatnią linię danych wyjściowych z cmake. Tam zobaczysz clang
zadzwonił ze wszystkimi .o
pliki, a plik wyjściowy to .dylib
. Brakuje tego wiersza -fembed-bitcode
a podczas łączenia biblioteki musisz ponownie przekazać -fembed-bitcode
flaga.
Tak więc poprzez dodanie flagi do celu kompilacji, a poprawne połączenie biblioteki dodaje kod bitowy.
target_compile_options( library PUBLIC -fembed-bitcode )
target_link_libraries( library PUBLIC -fembed-bitcode )