Как связать библиотеку Skia для проекта C ++ с XCode

Skia — это графическая библиотека (skia.org).
Документация объясняет, как строить библиотека после клонирования проекта через git. Но на данный момент документация неясна, как построить проект C ++ с XCode, который использует библиотеку Skia.

Я перепробовал все, что написано в документации, но не могу найти способ связать библиотеку skia в проекте C ++ XCode.

Любое решение?

1

Решение

Добавить путь поиска библиотеки

Этот снимок экрана показывает, где сделать эти шаги:
Добавить изображение пути библиотеки Skia

  1. В Project Navigator щелкните значок вашего проекта.
  2. На панели слева от главного окна окна, расположенного рядом с Навигатором проекта: снова щелкните значок своего проекта, чтобы открыть глобальную информацию и настройки проекта.
  3. В панели навигации в верхней части главного окна деления: нажмите «Настройки сборки»
  4. Убедитесь, что в представленных ниже фильтрах просмотра установлено значение «Все» и «Комбинировано», чтобы не пропустить ни одной настройки.
  5. В форме поиска параметров введите «Путь поиска библиотеки», чтобы найти запись для «Пути поиска библиотеки»
  6. Дважды щелкните элемент «Пути поиска библиотек», чтобы получить всплывающее окно, в котором можно указать пути поиска к библиотекам, которые должны быть связаны.
  7. Внутри всплывающего окна дважды щелкните пустую строку, чтобы ввести путь к вашему libskia.a файл библиотеки, который вы создали ранее. (Примечание: я использовал опцию статической сборки для создания статической библиотеки. Если вы хотите связать динамическую .so библиотека, настройки немного другие)

Статически Ссылка с libskia.a

Следующие шаги должны быть выполнены в том же разделе главного окна, что и предыдущие шаги.

  1. В форме поиска параметров введите «другая ссылка», чтобы найти запись для «Другие флаги компоновщика»
  2. Добавить флаг -lskia статически связать libskia.a библиотека при создании проекта.

Сделать заголовок Shure включенным, пути заданы

Следующие шаги должны быть выполнены в том же разделе главного окна, что и предыдущие шаги.

  1. В форме поиска параметров введите «поиск по заголовку», чтобы найти запись для «Пути поиска по заголовку»
  2. Дважды щелкните элемент «Пути поиска по заголовку», чтобы получить всплывающее окно, в котором можно указать пути поиска для заголовочных файлов, которые должны быть включены. Добавление «[путь к вашей директории Skia] / skia / include» и установка режима поиска справа на «рекурсивный» должно быть достаточным для примера ниже.

Добавьте Mac OSX специфичные зависимости Skia

Следующие шаги должны быть выполнены в том же разделе главного окна, что и предыдущие шаги.
Этот снимок экрана показывает, где сделать эти шаги:
Добавьте изображение зависимостей Skia Mac OSX

  1. На панели слева от главного окна деления рядом с Навигатором проекта: Нажмите на цель, чтобы открыть информацию о ней и ее настройки.
  2. В панели навигации в верхней части главного окна деления: нажмите «Фазы сборки»
  3. В разделе «Связать двоичные файлы с библиотеками» щелкните + знак.
  4. Добавьте следующие специфичные для Mac OSX зависимости Skia:
    • CoreServices.framework
    • CoreGraphics.framework
    • CoreText.framework
    • CoreFoundation.framework

Вы можете проверить эти настройки с помощью следующего примера кода:

#include "SkSurface.h"#include "SkPath.h"#include "SkCanvas.h"#include "SkData.h"#include "SkImage.h"#include "SkStream.h"
int main (int argc, char * const argv[]) {
// hard coded example program parameters
const char filePath[] = "/Users/[yourUserName]/Desktop/skiaTestImage.png";
int width = 256;
int height = 256;

// create canvas to draw on
sk_sp<SkSurface> rasterSurface = SkSurface::MakeRasterN32Premul(width, height);
SkCanvas* canvas = rasterSurface->getCanvas();

// creating a path to be drawn
SkPath path;
path.moveTo(10.0f, 10.0f);
path.lineTo(100.0f, 0.0f);
path.lineTo(100.0f, 100.0f);
path.lineTo(0.0f, 100.0f);
path.lineTo(50.0f, 50.0f);
path.close();

// creating a paint to draw with
SkPaint p;
p.setAntiAlias(true);

// clear out which may be was drawn before and draw the path
canvas->clear(SK_ColorWHITE);
canvas->drawPath(path, p);

// make a PNG encoded image using the canvas
sk_sp<SkImage> img(rasterSurface->makeImageSnapshot());
if (!img) { return 1; }
sk_sp<SkData> png(img->encode());
if (!png) { return 1; }

// write the data to the file specified by filePath
SkFILEWStream out(filePath);
(void)out.write(png->data(), png->size());

return 0;
}

Компиляция с терминалом

Вы можете сделать то же самое, написав файл make или вызвав компилятор g ++ непосредственно в терминале. Вот пример:

g++ -std=c++11 main.cpp -framework CoreFoundation -framework CoreGraphics -framework CoreText -framework CoreServices -L[path_to_your_Skia_library]/skia/out/Static_m58 -lskia -I[path_to_your_Skia_library]/skia/include/core -I[path_to_your_Skia_library]/skia/include/config -I[path_to_your_Skia_library]/skia/include/utils -I[path_to_your_Skia_library]/skia/third_party/externals/sdl/include -I[path_to_your_Skia_library]/skia/include/gpu -I[path_to_your_Skia_library]/skia/src/gpu -o main

Как я нашел решение

Поиск всего этого занял у меня около 12 часов. Если вы заинтересованы в шагах, которые в конечном итоге приводят к решению, я объясню их здесь. Просто дай мне знать.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]