Ошибка в проекте xcode: ld: библиотека не найдена для -lcrt1.10.6.o

Просто обновлен до Snow Leopard, установлен Xcode 3.2, затем установлен iPhone SDK 3 для SL.

В проекте теперь я получаю следующую ошибку при сборке:

ld: библиотека не найдена для -lcrt1.10.6.o

Я искал по сети, но ничего полезного не найдено.

Ответ 1

Изменить настройки проекта → На вкладке сборки → Для цели развертывания Mac OS X измените ее на 10,5 для XCode 3 (не 10.6, даже если на 10.6), и посмотрите, помогает ли это.

Для XCode 4 вам нужно установить его на 10.6

P.S. Убедитесь, что вы установили это для всех целей, а не только для выпуска или отладки. (если вы этого не сделали, один потерпит неудачу, другой не будет)

Ответ 2

Добавьте следующее в ~/.profile(для Mac OS X 10.5):

export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include
export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib

Ответ 3

Мне удалось исправить эту проблему, добавив следующее в мой Makefile:

CFLAGS="$(OTHER_CFLAGS) -mmacosx-version-min=10.5"
LDFLAGS="$(OTHER_LDFLAGS) -mmacosx-version-min=10.5"

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

Ответ 4

Похоже, вы собираете библиотеки из /usr/lib, что совершенно неуместно для iPhone SDK. Я бы предположил, что вы изменили свои настройки сборки, чтобы добавить /usr/lib в пути поиска библиотеки. В первую очередь это должно быть совершенно ненужным, поскольку /usr/lib находится в стандартных путях поиска компилятора, но если вам нужно иметь модифицированный путь поиска, как это, убедитесь, что вместо него используется $(SDKROOT)/usr/lib.

Ответ 5

Настройка цели развертывания для параметров по умолчанию для компилятора решила проблему. Не изменяйте ничего другого.

Ответ 6

Потрачено несколько часов на этом...

Интересно, для меня проблема была только для Simulator-Debug. Он не жаловался на Simulator-Release или Device Debug/Release!

В любом случае, изменение цели развертывания до 10.5 решило это для меня!

Ответ 7

Эта проблема решена, установив для Mac OS X Deployment Target значение 10.5 и после этого вернется к компилятору по умолчанию:)

Ответ 8

У меня была эта проблема, когда я использовал Xcode 4 на одной машине и Xcode 3.2.6 на другой. Предполагается, что две версии могут обмениваться файлами .xcodeproj между ними, но я обнаружил, что в файле project.pbxproj(внутри каталога .xcodeproj) все еще есть пара мест, которые читаются:

MACOSX_DEPLOYMENT_TARGET = 10.6;

Я ушел из Xcode и пошел и изменил три события:

MACOSX_DEPLOYMENT_TARGET = 10.5;

После повторного открытия проекта я смогу снова построить. Уф!

Ответ 9

У меня было такое же сообщение об ошибке, ни один из вышеперечисленных решений не работал у меня. Я разрешил его, удалив файлы *.pbxuser и *.mode1v3 внутри файла xcodeproj.

  • Управляйте/щелкните файл xcode *.xcodeproj
  • Выберите "показать содержимое пакета" в меню
  • Откроется окно с содержимым
  • Удалите файлы pbxuser/mode1v3, начинающиеся с вашего имени пользователя
  • Восстановить проект

Ответ 10

У меня была та же проблема в файле Fortran Makefile. Добавлена ​​следующая опция после компилятора (для OSX 10.5):

-L/Разработчик/SDKs/MacOSX10.5.sdk/USR/Библиотека

например,

g77 -L/Developer/SDK/MacOSX10.5.sdk/usr/lib

Теперь компилятор найдет нужную вам библиотеку!

Ответ 11

Компилятор обычно использует crt1.o в сочетании с crt [i/n].o и crt [begin/end].o для поддержки конструкторов и деструкторов (функции, называемые до и после main и выхода).

Эта ошибка может быть вызвана этим отсутствующим файлом библиотеки для конкретной цели развертывания.

Сначала выполните некоторые исследования, например:

  • Перечислите все цели развертывания:

    ls -la /Developer/SDKs
    
  • Найдите, какие библиотеки crt1 у вас есть, для какой среды

    find /Developer/SDKs -name crt1\*
    

    Вы можете увидеть что-то вроде:

    /Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.10.5.o
    /Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.o
    /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.5.o
    /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o
    /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.o
    

Как вы можете видеть в приведенном выше примере, для MacOSX10.5 отсутствует crt1.10.6.o.

Решение 1

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

ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o /Developer/SDKs/MacOSX10.5.sdk/usr/lib/

Другая причина, по которой он отсутствует, заключается в том, что в вашей системе может быть установлен другой gcc. Например:.

which gcc
xcrun -find gcc
brew list | grep gcc; brew list gcc47

Решение 2

Поэтому, когда вы компилируете с использованием make, вы можете указать правильный компилятор по переменной CC. Например.

CC=/path/to/gcc-3.4 make

Решение 3

То, что вы также можете попробовать, это указать правильную целевую переменную среды развертывания для gcc, например:

export MACOSX_DEPLOYMENT_TARGET=10.5

Если это работает, вы можете добавить этот путь к вашему профилю оболочки (~/.profile). Например.

export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include

export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib

Или путем временного экспорта их.


Как протестировать

Создайте пример файла conftest.c со следующим кодом:

#ifdef __GNUC__
  yes;
#endif

И попробуйте скомпилировать его с помощью:

gcc conftest.c
cc conftest.c
cc conftest.cc conftest.c

Ответ 12

Добавьте в файл ~/.profile следующее (для Mac OS X 10.5):

export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include

export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib

Учитывая сценарий с ограниченной вероятностью Kirandan (Snow Leopard, Xcode 3.2.1, iphone, ошибка пути к библиотеке), ответ Stefan (выше) работал на меня, кроме моего исключения было 10.5 (-lcrt1.10.5.o).

В другом месте я видел ответ Габора Целела (автора переиздания), и он исправил эту конкретную проблему, используя символическую ссылку (кстати, кто-то ссылался на эту страницу), но он отметил, что это было не самое лучшее путь.