Бинарный файл Xcode с библиотеками и непредвиденным типом файла - PullRequest
0 голосов
/ 30 марта 2019

Я хочу использовать библиотеки Oracle instantclient для C ++. Я использую Xcode в качестве IDE. Я добавил библиотеку occi , выбрав «Проект»> «Фаза сборки»> «Связать бинарный файл с библиотеками». При компиляции появляется следующее предупреждение и ошибка.

предупреждение: пропустить файл '/Users/user/Library/Oracle/instantclient_12_2/libocci.dylib.12.1' (неожиданный тип файла 'text.man' на этапе сборки Frameworks & Libraries)

ошибка: неопределенные символы для архитектуры x86_64: "oracle :: occi :: Environment :: createEnvironment (oracle :: occi :: Environment :: Mode, void *, void * () (void , без знака long), void * () (void , void *, unsigned long), void () (void , void *)) ", на который ссылаются: _main in main.o

Конечно, ошибка связана с предупреждением. Похоже, что проблема исходит из номера версии (.12.1) в конце файла после «.dylib» (у меня нет проблемы для других библиотек в той же папке, для которых имя не имеет номер версии после расширения файла).

Библиотека instantclient может быть загружена здесь . Вы увидите, что загруженная папка будет содержать файлы libocci.dylib и libocci.dylib.12.1 . Первый является ссылкой на второй:

ls -l *occi*
lrwxr-xr-x@ 1 user  wheel       18 Mar 23 14:01 libocci.dylib -> libocci.dylib.12.1
-rwxr-xr-x@ 1 user  wheel  1465312 Jan  9  2018 libocci.dylib.12.1

Я попытался с двумя файлами, и XCode будет автоматически использовать libocci.dylib.12.1 .

Вопросы:

  • Почему номер версии устанавливается после расширения .dylib?
  • Почему компилятор не распознает тип файла?
  • Что нужно сделать, чтобы компилятор распознал тип файла?

1 Ответ

0 голосов
/ 01 апреля 2019

Мне пришлось добавить DYLD_LIBRARY_PATH в env vars в продукте> схема> изменить схему.

Также добавить -locci и -lclntsh к "другим флагам компоновщика" в настройках сборки.

...