У меня есть библиотека ядра C ++ A, которую я помещаю в статический архив .a.Я пытаюсь связать этот архив со вторым быстрым проектом B, который использует привязки C к библиотеке A. Все работало нормально, пока я не добавил некоторые хронологические ссылки на libc ++ в базовую библиотеку c ++.Сам по себе A компилируется нормально, но когда я ссылаюсь на проект B, для chrono больше нет символов.
Я попытался поместить chrono в заголовочный файл и файл cpp.Изменены настройки сборки XCode для использования libc ++ вокруг и всегда с одинаковым результатом:
Undefined symbols for architecture x86_64:
"std::__1::chrono::steady_clock::now()", referenced from:
utility::stopwatch::reset() in libtest.a(test.o)
ld: symbol(s) not found for architecture x86_64
Я могу использовать chrono непосредственно внутри проектов A и B, но не добавлять его в A и использовать егоиз Б. Как получилось?Я в растерянности.
/ updates:
Использование Xcode 10
Шаги для воспроизведения:
1) создать новое рабочее пространствоA
2) создайте новую статическую библиотеку c ++ проекта B и добавьте ее в рабочую область A и добавьте два файла:
// test.h
extern "C" {
void using_chrono();
}
// test.cpp
#include <chrono>
void using_chrono() {
std::chrono::steady_clock::time_point t = std::chrono::steady_clock::now();
}
3) создайте второй быстрый проект C и добавьте его в рабочую областьТоже.
4) создайте мостовой заголовок Bridging-Header.h со следующим:
// Bridging-Header.h
void using_chrono();
5) сборка B
6) связать получившийся .aархивировать в проект C на этапе сборки
7) добавить заголовок моста в опцию заголовка моста объекта-c в настройках сборки для проекта C
8) компиляции.Проект C не может найти std::chrono::steady_clock::now()
Я думаю, что это может иметь какое-то отношение к преобразованию C с помощью swift, поскольку функция steady_clock::now()
все еще использует искажение символов C ++, а swift для импорта необходимы чистые функции C,Я пытался обернуть steady_clock::now()
глобальным классом, extern "C", обертками C, но, похоже, он не компилируется (обертывание в C не работает вообще из-за шаблонов хроно).длительности и time_point и др. вроде бы работают нормально, но не now()
.