Проект Xcode 11 на MacOS не использует sin и cos в одной функции: неопределенный символ "___sincosf_stret" - PullRequest
1 голос
/ 22 января 2020

Сборка моих библиотек на Ma c неожиданно начала давать сбой с версией Xcode 11.3 (11C29).

Мне удалось выделить одну проблему:

Кажется, что когда вы используете sin и потому, что в той же функции оптимизатор будет использовать __sincosf_stret для одновременного вычисления обоих значений.

Итак, что я сделал:

  1. Создайте новый проект Xcode, инструмент строки cmd, цель - c
  2. Измените main.m на main.mm, чтобы разрешить C ++
  3. Измените main на:
#import <Foundation/Foundation.h>
#include <cmath>

void coordinateCalculator(float angle, float radius, float& x, float& y) {
    float mySin = sin(angle);
    float myCos = cos(angle);
    x = radius * myCos;
    y = radius * mySin;
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        float myAngle = 0.0;
        float theX, theY;
        float radius = 100.0;
        while (myAngle < 360.0) {
            coordinateCalculator(myAngle, radius, theX, theY);
            NSLog(@"My coordinates: %f, %f",theX,theY);
            myAngle += 1.0;
        }
    }
    return 0;
}

Сборка в Debug работает нормально, сборка профиля (версия выпуска с оптимизацией) завершится с ошибкой:

Undefined symbols for architecture x86_64:
  "___sincosf_stret", referenced from:
      coordinateCalculator(float, float, float&, float&) in main.o
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я строю с помощью:

  • C ++: C ++ 14, libC ++
  • Базовый SDK: MacOS
  • Цель развертывания 10.14

Когда я изменяю цель развертывания на 10.7, обнаруживается sincosf_stret, но я получаю 2 AR C ошибки :

Undefined symbols for architecture x86_64:
  "_objc_loadClassref", referenced from:
      __ARCLite__load() in libarclite_macosx.a(arclite.o)
  "_objc_readClassPair", referenced from:
      __ARCLite__load() in libarclite_macosx.a(arclite.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Игра с использованием SDK для развертывания дает мне:

  • 10.7: 2 AR C link err ors
  • 10.10: 2 AR C ошибки ссылки И _sincosf_ret ошибка
  • 10.12 или выше: _sincosf_ret error

Я не могу поверить, что это невозможно использовать sin / cos в одной функции.

1 Ответ

0 голосов
/ 24 января 2020

Переустановка XCode решила мою проблему. Другой разработчик попробовал это на своей системе, и это, похоже, сработало. Это заставило меня принять решение удалить XCode и установить его снова. Проблема ушла сейчас. Нет проблем с самим XCode.

...