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

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

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

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

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


person kindaran    schedule 01.09.2009    source источник
comment
Спасибо всем за ответы. В итоге я вернулся к Leopard, а затем выполнил полную переустановку SL, Xcode, SDK. Я не понимаю сейчас проблемы, поэтому не могу воспользоваться чьим-либо советом :) Но если это снова возникнет, я буду ссылаться на это. Мне интересно, не потому ли, что в прошлый раз я изменил настройки проекта с GCC на LLVM (я хотел попробовать «новый» компилятор :). На этот раз я этого не сделал.   -  person kindaran    schedule 04.09.2009
comment
Как ты вернулся к Леопарду? Машина времени?   -  person Elliot    schedule 28.10.2009
comment


Ответы (12)


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

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

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

person Community    schedule 03.09.2009

Добавьте следующее в ~ / .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
person Stefan    schedule 31.12.2009

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

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

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

person Community    schedule 26.10.2009
comment
Да, это тоже для меня. - person Pedro d'Aquino; 10.09.2010

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

person Lily Ballard    schedule 01.09.2009
comment
Я посмотрю. Ничего не изменил, так что, наверное, так было раньше. - person kindaran; 02.09.2009
comment
Поскольку я новичок, я смотрю в настройках проекта и не вижу очевидных вещей, которые нужно изменить. Здесь нужна небольшая помощь. - person kindaran; 02.09.2009
comment
Получите информацию о каждой библиотеке в вашем проекте. Убедитесь, что это связано с SDK. Также дважды проверьте, настроили ли вы параметр «Пути поиска в библиотеке» для своего проекта или цели - если да, убедитесь, что он не включает / usr / lib. - person Lily Ballard; 04.09.2009

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

person ashna    schedule 15.11.2011

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

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

Сначала проведите небольшое расследование, например:

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

    ls -la /Developer/SDKs
    
  2. Найдите, какие 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
    

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

Решение 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
person kenorb    schedule 19.04.2013

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

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

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

person prakash    schedule 04.09.2009

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

person beryllium    schedule 22.03.2011

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

MACOSX_DEPLOYMENT_TARGET = 10,6;

Я вышел из Xcode, пошел и изменил три вхождения на:

MACOSX_DEPLOYMENT_TARGET = 10,5;

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

person Ben Golding    schedule 30.03.2011

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

  1. Управляйте / щелкните файл xcode * .xcodeproj
  2. Выберите в меню опцию «показать содержимое пакета».
  3. Откроется окно с содержимым
  4. Удалите файлы pbxuser / mode1v3, которые начинаются с вашего имени пользователя.
  5. Восстановить проект
person Geoff Smith    schedule 04.05.2011

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

-L / Разработчик / SDK / MacOSX10.5.sdk / usr / lib

e.g.,

g77 -L / Разработчик / SDK / MacOSX10.5.sdk / usr / lib

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

person Community    schedule 15.03.2012

Add the following to ~/.profile (for 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

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

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

person michaelok    schedule 09.09.2010