___sincos_stret undefined символ при соединении

Как и ранее упоминавшийся здесь, ___sincos_stret не может быть найден при компиляции проекта, который использует этот символ, используя инструменты командной строки Xcode5.

В приведенной выше ссылке исправлено решение для целей IOS (передача -miphoneos-version-min=5.0 в компилятор), есть ли решение для целей рабочего стола (x64)?

Это, например, случается для меня при попытке скомпилировать polycode.

Изменить 2:

Как ни странно, после компиляции библиотек, указанных в предыдущей ошибке вручную, ошибка теперь находится в lto.o, которая внутренний заголовок llvm...

undef: ___sincos_stret
Undefined symbols for architecture x86_64:
  "___sincos_stret", referenced from:
      _mdct_init in lto.o
      _dradfg in lto.o

Я запускаю OSX 10.9 DP с Xcode 5. Это шаг ссылки.

Ответы

Ответ 1

Похоже, что un-and reinstalling Xcode5 DP и инструменты командной строки OSX 10.9 решили проблему. Я предполагаю, что возникла проблема с обновлением из предыдущих версий.

Ответ 2

stret Яблоко говорит для "возвращает структуру". ___sincos_stret - это оптимизация LLVM - если вы пишете код, который вызывает sin(n), а затем cos(n) и использует оба результата, тогда компилятор сделает один вызов метода, возвращающего структуру, и получит структуру, в которой есть обе вещи. Это быстрее работать как сразу, а не отдельно, если операнд один и тот же.

В поверхностном просмотре я не вижу sin или cos в initInterTab2D, но я ожидаю, что что-то будет включено.

В то время как я трясся, я пробовал:

cd /Applications/Xcode.app/Contents/Developer/Platforms 
grep -lr ___sincos_stret *

Через это и используя nm по вероятным результатам, я обнаружил, что функция ___sincos_stret отображается в обоих iOS с 7.0 и OS X с 10.9 как часть их libsystem_m.dylib s. Например. если ваш Xcode установлен в месте по умолчанию, попробуйте:

nm /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system/libsystem_m.dylib | grep sincos

и/или

nm /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/system/libsystem_m.dylib | grep sincos

Вы увидите символ в любом из них. Поэтому правильным решением было бы установить более старую цель развертывания в Xcode или сделать эквивалент в вашем файле.

Ответ 3

Вы хотите -mmacosx-version-min=10.8 (или независимо от вашей целевой версии ОС).

Ответ 4

Откройте следующий файл в текстовом редакторе  /opt/local/etc/macports/macports.conf и добавьте туда строки типа

# MACOSX_DEPLOYMENT_TARGET - osx version to be compatible with earlier OSX version.
macosx_deployment_target            10.8
MACOSX_DEPLOYMENT_TARGET            10.8