libauth неправильно связан

#c #xcode #linker #linker-errors

#c #xcode #компоновщик #компоновщик-ошибки

Вопрос:

Я пытаюсь добавить libauth.dylib для моего проекта xcode (c ). Я настроил и создал библиотеку, которая сейчас находится в моем /usr/local/lib , которая теперь имеет:

  liboauth.0.dylib
 liboauth.dylib <- a link to liboauth.0.dylib
 liboauth.li
 liboauth.a
  

с заголовком внутри usr/local/include . Кажется, все в порядке.

Я включил это в свой xcode, добавив путь /usr/local/lib/liboauth.dylib к Other Linker Flags разделу и usr/local/include/ к Header Search Paths .

Я также включил то же самое в Library Search Paths .

Это отлично работает в моей системе. Однако, если я переношу полученный файл .app на другой компьютер (osx), он выдает ошибку /usr/local/liboauth.0.dylib (я получаю это, открывая .app и запуская исполняемый файл unix).

Разве компоновщик не должен был включать libauth dylib при сборке? И тогда это не должно быть проблемой при переходе на другой компьютер?

Если ответ отрицательный, то как бы я включил liboauth.dylib в .app, чтобы он мог работать на любом компьютере (под управлением osx)?

Вот конкретная ошибка:

 Library not loaded: /usr/local/lib/liboauth.0.dylib
Referenced from: /Users/scratch/gameTest.app/Contents/MacOS/gameTest
Reason: image not found
  

Редактировать: я нашел проблему! Используя команду otool -l в liboauth.0.dylib, я нашел это:

 Load command 3
          cmd LC_ID_DYLIB
      cmdsize 56
         name /usr/local/lib/liboauth.0.dylib (offset 24)
   time stamp 1 Thu Jan  1 12:00:01 1970
      current version 9.1.0
compatibility version 9.0.0
  

Может кто-нибудь помочь мне понять, как это изменить? Я думаю, что это как-то связано с install_name_tool, но я не знаю, как это сделать правильно.

Ответ №1:

Являются ли обе системы одинаковыми? 32-разрядный / 64-разрядный, Snow Leopard против Leopard.

Я вижу, как библиотеки будут отличаться, и эта ошибка могла бы возникнуть, если бы это было так.

Если они совпадают, возможно, вы устанавливаете флаги компоновщика в настройках вашего проекта, и они переопределяются вашими целевыми настройками.

Комментарии:

1. Да, оба являются Snow Leopard. Просто чтобы подтвердить, что только в моей ос установлен liboauth. Другой компьютер этого не делает. Я ожидаю, что мое приложение будет включать liboauth. dylib внутри и считывается из него. В отличие от попытки чтения из /usr/local/

2. Если они совпадают, возможно, вы устанавливаете флаги компоновщика в настройках вашего проекта, и они переопределяются вашими целевыми настройками.

3. Хм, нет, я только что дважды проверил это, и они идентичны в обоих случаях. Тем не менее, хорошее предложение. Я пытался это сделать, но все равно получаю ту же ошибку: cp -f /usr/local/lib/libauth. dylib «$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/macOS/libauth. dylib»; install_name_tool -изменить ./liboauth. dylib @executable_path/libauth. dylib «$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/macOS/ $PRODUCT_NAME»; Кажется ли это правильным?

4. Привет, я нашел работу здесь. Я включаю ‘liboauth. dylib’ в my .app, а затем я использую ‘install_name_tool’ с терминалом, чтобы изменить, где он искал другие dylibs и т.д. Это влечет за собой также включение libcrypto, libiconv, libidn, libintl, libssl и libz (и изменение всех там вещей хорошо). Это плохо, я нарушаю правила / делаю это неправильно?