Как исправить ошибку «ld: 32-битная относительная ссылка RIP вне диапазона» при связывании объекта, созданного из исходнC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как исправить ошибку «ld: 32-битная относительная ссылка RIP вне диапазона» при связывании объекта, созданного из исходн

Сообщение Anonymous »


Я создаю приложение на C++ для нескольких платформ, и у меня есть большой массив байтов, который я хотел бы встроить в приложение (его размер составляет около 40 МБ).

Раньше я создавал заголовочный файл C++, содержащий данные, представленные в виде массива C++, но его компиляция занимает очень много времени. Сейчас я пытаюсь сгенерировать исходный файл ассемблера, использовать директиву "incbin" для включения данных, а затем связать полученный объектный файл с моим приложением, тем самым устраняя необходимость использования компилятора C++.

У меня возникли проблемы с платформой Mac. Я компилирую, используя XCode 13.4.1, для целей Arm64 и x64_64. Решение отлично работает для Arm64, но не работает для x86_64.

В частности, я получаю следующую ошибку ссылки:

окончательный макет раздела: __TEXT/__text адрес=0x100003F70, размер=0x0000001D, fileOffset=0x00003F70, тип=1 __TEXT/__stubs адрес=0x100003F8E, размер=0x00000006, fileOffset=0x00003F8E, тип=29 __TEXT/__stub_helper адрес=0x100003F94, размер=0x0000001A, fileOffset=0x00003F94, тип=33 __TEXT/__cstring адрес=0x100003FAE, размер=0x00000004, fileOffset=0x00003FAE, тип=13 __TEXT/__unwind_info адрес=0x100003FB4, размер=0x00000048, fileOffset=0x00003FB4, тип=22 __DATA_CONST/__got addr=0x100004000, размер=0x00000008, fileOffset=0x00004000, тип=30 __DATA/__la_symbol_ptr адрес=0x100008000, размер=0x00000008, fileOffset=0x00008000, тип=28 __DATA/__data адрес=0x100008040, размер=0x025047A0, fileOffset=0x00008040, тип=0 ld: относительная ссылка 32-битного RIP выходит за пределы диапазона (-4256167970 максимум +/-2 ГБ): от _main (0x100003F70) до _kEmbeddedDataPack_sz (0x02504760) в '_main' из /Users/nickko/Library/Developer/Xcode/DerivedData/ TestApp-fmueotrdocmveqccnonnadmvuhpd/Build/Intermediates.noindex/TestApp.build/Debug/TestApp.build/Objects-normal/x86_64/main.o Для справки, это ассемблерный файл, который я генерирую:

.data .balign 64 .global _kEmbeddedDataPack _kEmbeddedDataPack: .incbin "mydata.bin" .global _kEmbeddedDataPack_end _kEmbeddedDataPack_end: .global _kEmbeddedDataPack_sz .set _kEmbeddedDataPack_sz, . - _kEmbeddedDataPack Я пробовал собрать с помощью -fno-pic -fno-pie -no-pie, но это не решило проблему. Я также пытался выполнить сборку с параметром -mcmodel=large, но это вызывает другую ошибку компоновщика.

Можно ли как-нибудь успешно связать это решение? Я бы хотел придерживаться подхода создания ассемблерного файла, если это возможно, потому что я также нацелен на другие платформы с помощью clang (не только XCode/Mac).

Спасибо за помощь.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему моя 8-битная квантованная модель медленнее, чем 16-битная?
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Почему моя 8-битная квантованная модель медленнее, чем 16-битная?
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • JRE 32-битная или 64-битная
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • 64 -битная и 32 -битная проблема в интеграции R и Java [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Странная программа C ++ разбила с %RIP = 0x8
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»