Skia — это графическая библиотека (skia.org).
Документация объясняет, как строить библиотека после клонирования проекта через git. Но на данный момент документация неясна, как построить проект C ++ с XCode, который использует библиотеку Skia.
Я перепробовал все, что написано в документации, но не могу найти способ связать библиотеку skia в проекте C ++ XCode.
Любое решение?
Этот снимок экрана показывает, где сделать эти шаги:
Добавить изображение пути библиотеки Skia
libskia.a
файл библиотеки, который вы создали ранее. (Примечание: я использовал опцию статической сборки для создания статической библиотеки. Если вы хотите связать динамическую .so
библиотека, настройки немного другие)Следующие шаги должны быть выполнены в том же разделе главного окна, что и предыдущие шаги.
-lskia
статически связать libskia.a
библиотека при создании проекта.Следующие шаги должны быть выполнены в том же разделе главного окна, что и предыдущие шаги.
Следующие шаги должны быть выполнены в том же разделе главного окна, что и предыдущие шаги.
Этот снимок экрана показывает, где сделать эти шаги:
Добавьте изображение зависимостей Skia Mac OSX
+
знак.Вы можете проверить эти настройки с помощью следующего примера кода:
#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 часов. Если вы заинтересованы в шагах, которые в конечном итоге приводят к решению, я объясню их здесь. Просто дай мне знать.
Других решений пока нет …