#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 (и изменение всех там вещей хорошо). Это плохо, я нарушаю правила / делаю это неправильно?