Ошибка связывания статической библиотеки mach-o, полученной из статической библиотеки elf32 на macOs Sierra

Я хотел создать двоичный файл 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 необходимо предоставить дополнительные инструкции, чтобы я мог обойти эту проблему?

Спасибо!


person Ermin Hasičević    schedule 24.08.2017    source источник


Ответы (1)


Преобразование объектного или библиотечного файла из одной ОС в другую возможно только в очень простых случаях. Поскольку у вас есть исходные файлы, вам следует перекомпилировать их под Mac OS.

person A Fog    schedule 25.08.2017