неопределенные символы неопределенные символы для архитектуры x86_64: "_kCFAllocatorDefault" - PullRequest
3 голосов
/ 31 марта 2012

Я пытаюсь скомпилировать некоторые вещи под Mac OS 10.7 в Eclipse, и сборка умирает на:

  Undefined symbols for architecture x86_64:
  "_kCFAllocatorDefault", referenced from:
      ___GLeeGetProcAddress in GLee.o
  "_CFURLCreateWithFileSystemPath", referenced from:
      ___GLeeGetProcAddress in GLee.o
  "_CFStringCreateWithCString", referenced from:
      ___GLeeGetProcAddress in GLee.o
  "_CFBundleCreate", referenced from:
      ___GLeeGetProcAddress in GLee.o
  "_CFBundleGetFunctionPointerForName", referenced from:
      ___GLeeGetProcAddress in GLee.o
  "_CFRelease", referenced from:
      ___GLeeGetProcAddress in GLee.o
  "_glGetString", referenced from:
      ___GLeeGetExtensions in GLee.o
      _GLeeGetExtStrGL in GLee.o
      _GLeeInit in GLee.o
     (maybe you meant: _GLee_Lazy_glGetStringi, _GLeeFuncPtr_glGetStringi )
  "___CFConstantStringClassReference", referenced from:
      CFString in GLee.o

Так что я знаю, что проблема с символами ld.Теперь я попытался спроецировать свойства проекта и добавить -framework CoreFramework к параметрам g ++ и gcc в eclipse, но это не помогло.

Где находятся эти символы и, что более важно, - как мне добавить их вмой проект ?

Ответы [ 2 ]

5 голосов
/ 02 апреля 2012

Я исправил это, добавив .dylib к компоновщику. Как это настроить?

  1. Перейти к проектам
  2. Перейти к сборке C / C ++ -> настройки
  3. Выберите Mac OS X C ++ Linker -> Библиотеки Вот где сложная часть ... Я узнал методом "try-error", как это работает:

Допустим, у вас есть файл dylib, который вы хотите добавить, с именем "libMyLib.dylib", расположенный в / opt / local / lib / MyLibrary

К той части окна, где написано, что библиотеки добавляют строку "MyLib" К той части окна, где написано «Путь поиска библиотеки», добавьте строку "/ Opt / местные / Библиотека / MyLibrary /"

=> eclipse автоматически сделает это: 1. добавьте «lib» перед строкой 2. добавьте ".dylib" после вашей строки

Возникает еще одна проблема с Mac ... Допустим, вы используете символы из инфраструктуры CoreFoundation. Фреймворки Mac OS - это необходимые файлы с заголовочными файлами ... Если вы не уверены, что вы всегда можете проверить по «file myFile»

Проблема в том, что eclipse никогда не сможет правильно подобрать эти dylibs из MAC OS SDK и / System / Library / Frameworks /, поскольку к ним не добавлен .dylib. Хитрость заключается в том, чтобы просто пойти туда, где находится dylib (даже если в его имени нет .dylib), например. cd /System/Library/Frameworks/CoreFoundation.framework

, а затем скопируйте файл и добавьте dylib (НЕ ПЕРЕИМЕНУЙТЕ ЕГО !!!)

  file CoreFoundation
  CoreFoundation (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 
  CoreFoundation (for architecture i386):   Mach-O dynamically linked shared library i386
  #copy the lib and name it to "eclipse friendly format"
  cp CoreFoundation libCoreFoundation.dylib
4 голосов
/ 28 декабря 2012

Вы можете использовать опцию -framework например Основа g ++ CoreFoundation ..........

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...