Связать статический архив с libc ++ chrono и Xcode 10 - PullRequest
0 голосов
/ 09 октября 2018

У меня есть библиотека ядра 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().

...