Я хотел создать двоичный файл macOS для того проекта Makefile, который у меня был для Linux.
Исходный проект Linux связан со статической библиотекой elf32, поэтому я подумал, что могу использовать objconv для этого преобразования.
Я делаю конвертацию по телефону:
objconv -fmacho32 -nu lib_elf.a lib_macho.a
и получите следующий результат:
Предупреждение 1053: Общая константа преобразована в общедоступную: triple_des_software_global_tdes_standard Предупреждение 1053: Общая константа преобразована в общедоступную: triple_des_software_global_mode Предупреждение 1053: Общая константа преобразована в общедоступную: triple_des_software_global_key Предупреждение 1053: Общая константа преобразована в общедоступную: maskk Предупреждение 1053: Общая константа преобразована в общедоступную: sbox Предупреждение 1053: общая константа преобразована в общедоступную: _SM Предупреждение 1053: общая константа преобразована в общедоступную: bit_size Предупреждение 1053: общая константа преобразована в общедоступную: _local_ucl_a_sm2vp256 Предупреждение 1053: общая константа преобразована в общедоступную: _local_ucl_inv2_sm2vp256 Предупреждение 1053: общая константа преобразована в общедоступную: _local_mcl_ucl Предупреждение 1053: Общая константа преобразована в общедоступную: signature_computation Предупреждение 1053: Общая константа преобразована в общедоступную: _ucl_n_stored Предупреждение 1053: Общая константа преобразована в общедоступную: _ucl_rsqr_stored Предупреждение 1053: Общая константа преобразована в общедоступную: _ucl_r_s tored Предупреждение 1053: Общая константа преобразована в общедоступную: sm2fp192 Предупреждение 1053: Общая константа преобразована в общедоступную: m0 Предупреждение 1053: Общая константа преобразована в общедоступную: shadec_ctx Предупреждение 1053: Общая константа преобразована в общедоступную: shasign_ctx Предупреждение 1053: Общая константа преобразована в общедоступную: Предупреждение aesctx 1053: Общая константа преобразована в общедоступную: W32 Предупреждение 1053: Общая константа преобразована в общедоступную: H32 Предупреждение 1053: Общая константа преобразована в общедоступную: a32 Предупреждение 1053: Общая константа преобразована в общедоступную: b32 Предупреждение 1053: Общая константа преобразована в общедоступную: c32 Предупреждение 1053: Общая константа преобразована в общедоступную: d32 Предупреждение 1053: Общая константа преобразована в общедоступную: e32 Предупреждение 1053: Общая константа преобразована в общедоступную: f32 Предупреждение 1053: Общая константа преобразована в общедоступную: g32 Предупреждение 1053: Общая константа преобразована в общедоступную: h32 Предупреждение 1053: Общая константа преобразована в public: workbuffer Предупреждение 1053: Общая константа преобразована в public: _sta ck Предупреждение 1053: Общая константа преобразована в общедоступную: _stack_index Предупреждение 1053: Общая константа преобразована в общедоступную: hash_size Предупреждение 1053: Общая константа преобразована в общедоступную: using_sha_hardware Входная библиотека: lib_elf.a, Формат: ELF, Вывод: lib_macho.a, Формат: Mach -O Little Endian
392 раздела отладки удалено 147 разделов исключений удалено 1922 Изменения в начальных подчеркиваниях в именах символов
Я думаю, что до сих пор все должно быть в порядке?
Когда я пытаюсь установить ссылку на lib_macho.a, я получаю следующий результат:
make gcc-4.0 -O3 -g0 -v -W -Wall -DWORD32 -m32 -I../include -I../include/ucl -L. -o ../bin/darwin/ca_sign_build test.o -m32 -v -l_macho couldn't understand kern.osversion `16.7.0' Using built-in specs. Target: i686-apple-darwin10 Configured with: /var/tmp/gcc_40/gcc_40-5494~315/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-arch=apple --with-tune=generic --host=i686-apple-darwin10 --target=i686-apple-darwin10 Thread model: posix gcc version 4.0.1 (Apple Inc. build 5494) /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/gcc/i686-apple-darwin10/4.0.1/collect2
-dynamic -arch i386 -macosx_version_min 10.4 -weak_reference_mismatches non-weak -o ../bin/darwin/ca_sign_build -lcrt1.o -L. -L / Applications / Xcode.app / Contents / Developer / Toolchains / XcodeDefault.xctoolchain / usr / bin /../ lib / gcc / i686-apple-darwin10 / 4.0.1 -L / Applications / Xcode.app / Contents / Разработчик / Toolchains / XcodeDefault.xctoolchain / usr / bin /../ lib / gcc -L / Applications / Xcode.app / Contents / Developer / Toolchains / XcodeDefault.xctoolchain / usr / bin /../ lib / gcc / i686- apple-darwin10 / 4.0.1 /../../ .. test.o -l_macho -lgcc -lSystem ld: in ./lib_macho.a(ucl_sys.co), в разделе __TEXT, __ text reloc 2: R_ABS reloc, но нет абсолютного символа по целевому адресу для архитектуры i386 collect2: ld возвратил 1 статус выхода make: *** [ca_sign_build] Ошибка 1
Мне не удалось найти в Google полезный текст по:
ld: in ./lib_macho.a(ucl_sys.c.o), в разделе __TEXT, __ text reloc 2: R_ABS reloc, но без абсолютного символа по целевому адресу для архитектуры i386
так что мне интересно, есть ли кто-нибудь, кто может сказать мне что-нибудь об этой ошибке компоновщика?
Я пробовал использовать последнюю версию gcc, основанную на clang / llvm, gcc-4.2 и gcc-4.0, которые я получил с помощью xcodelegacy.sh, извлекая их из xcode .dmg, но всегда получаю ту же ошибку.
Является ли ошибка, которую я получаю, связана с используемой версией gcc, или для objconv необходимо предоставить дополнительные инструкции, чтобы я мог обойти эту проблему?
Спасибо!