dyld: библиотека не загружена, причина: изображение не найдено

Я использовал GDB нормально до этой недели. Сейчас работает GDB я вижу:

(gdb) r
Starting program: /Volumes/MyProg 
dyld: Library not loaded: @rpath/libCore.so
  Referenced from: /Volumes/MyProg
  Reason: image not found
(gdb) 

Как это исправить?

Я имею:

  • OSX 10.9
  • GNU GDB (GDB) 7,6 установлен с MacPorts

PS

Я переустановил GDB и XCode. Это не помогает.

Я вижу много вопросов о проблемах с dyld, но, очевидно, мне не хватает опыта работы с библиотеками на OSX, и они кажутся мне бесполезными.

Например, эта тема: dyld выдает библиотеку, не загруженную. Но как снова загрузить библиотеку?

Или эта тема: Dyld: Библиотека не загружена. Но как узнать имя установки? Что такое @rpath?

4 ответа

Решение

Как я это исправил:

  1. libCore.so библиотека из фреймворка ROOT, которая MyProg использует.
  2. Если я правильно понимаю, сообщение Library not loaded: @rpath/libCore.so Referenced from: /Volumes/MyProg Reason: image not found означает, что компоновщик нашел библиотеку, но не может ее использовать.
  3. Root, при установке используется clang по умолчанию. Между тем, как я предпочитаю GCC и MyProg использует gcc.
  4. Я переустановил root с помощью компилятора gcc:

    ./configure --with-cxx = g ++ --with-cc = gcc --with-ld = g ++

  5. Я перекомпилировал MyProg,

и теперь я могу отладить его с помощью GDB.

Я решил эту проблему с помощью "Embedded Binaries" в общих настройках проекта.

Я решил эту проблему, изменив следующие настройки

Перейдите в Project Setting Your_Target->General->Embedded Binaries-> Нажмите на кнопку + и добавьте свою библиотеку сюда

Вы можете найти больше информации о rpath здесь: ссылка

Поэтому вам нужно указать путь к вашему libCore.so, но, честно говоря, я не сталкивался с этой библиотекой, поэтому не знаю, где она находится.

Вы также можете проверить этот ответ, чтобы понять, что такое rpath: answer

Для Xcode 11 или выше есть другое более простое решение, которое сработало для меня, если вы используете Cocoapods.

В свой Podfile добавьте use_frameworks! после вашей целевой строки вот так -

target 'YourAppName' do
  use_frameworks!

По сути, он добавляет все ваши модули в качестве фреймворка в папку фреймворка.

Другие вопросы по тегам