skia是图形库(skia.org(。文档说明了如何通过git克隆项目后如何构建库。但是该文档尚不清楚该日期,如何使用使用SKIA库的Xcode构建C 项目。
我尝试了文档中写的所有内容,但找不到如何在C Xcode项目中链接Skia库的方法。
如何解决问题:
添加库搜索路径
此屏幕截图显示了如何以及在何处执行这些步骤:
添加Skia库路径图像
- 在项目导航器中,单击项目的图标。
- 在项目导航器旁边主窗口部左侧的面板中:再次单击您的项目图标以打开项目全局信息和设置。
- 在主窗口部门的导航栏中:单击"构建设置"
- 确保以下视图过滤器设置为" ALL"并"合并"因此,您不会错过任何设置。
- 在选项搜索表中输入"库搜索路径"要找到"库搜索路径"的条目"
- 双克里克(Double Klick(条目"库搜索路径"要接收可以在其中指定应链接到库的搜索路径的弹出窗口。
- 在弹出窗口中,双击一个空行,输入您之前构建的
libskia.a
库文件的路径。(注意:我使用静态构建选项来创建静态库。如果要链接动态.so
库,则设置略有不同(
静态链接与libskia.a
应与以前的步骤进行以下步骤。
- 在选项搜索表中输入"其他链接"要查找"其他链接器标志"的条目"
- 在构建项目时,将标志
-lskia
添加到静态链接libskia.a
库。
确保标题包括路径
应与以前的步骤进行以下步骤。
- 在选项搜索表中输入"标题搜索"要找到"标题搜索路径"的条目"
- 双克里克(Double Klick(入口"标题搜索路径"要接收可以在其中指定应包括的标题文件的搜索路径。添加" [通往SKIA目录的路径(/Skia/include"并在"递归"的右侧设置搜索模式。对于下面的示例应该足够。
添加Skia的Mac OSX特定依赖项
应与以前的步骤进行以下步骤。此屏幕截图显示了在哪里执行以下步骤:
添加Skia Mac OSX特定依赖项图像
- 在项目导航器旁边的主窗口部门左侧的面板中:单击目标以打开目标特定信息和设置。
- 在主窗口部门的导航栏中:单击"构建阶段"
- 在"链接二进制链接与库"下,单击
+
符号。 - 添加以下MAC OSX特定SKIA依赖性:
- coreservices.framework
- coregraphics.framework
- coretext.framework
- corefoundation.framework
testcode
您可以使用以下示例代码测试这些设置:
#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->encodeToData());
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;
}
附录
用端子编译
您可以通过编写制作文件或直接在终端中调用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个小时。如果您对最终导致解决方案的步骤感兴趣,我将在此处解释。让我知道。