Сборка моих библиотек на Ma c неожиданно начала давать сбой с версией Xcode 11.3 (11C29).
Мне удалось выделить одну проблему:
Кажется, что когда вы используете sin и потому, что в той же функции оптимизатор будет использовать __sincosf_stret для одновременного вычисления обоих значений.
Итак, что я сделал:
- Создайте новый проект Xcode, инструмент строки cmd, цель - c
- Измените main.m на main.mm, чтобы разрешить C ++
- Измените 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 в одной функции.