我认为这应该很容易,但是...... geesh!供应商给了我一个相当简单的演示程序,旨在展示一些琐碎的图标动画.目标平台是嵌入式系统(MX51),具有加速的OpenGL ES 2.0/OpenVG和EGL支持.
不幸的是,该演示还对一些Qt实用程序类(例如,QImage)具有恼人的依赖性.如果不是这种依赖,我会编译/运行目标上的东西.但我不喜欢交叉编译Qt只是为了运行这个小小的演示 - 即使嵌入式电路板上有足够的空间.
我希望我能够在标准(ish)Ubuntu 10.04 VM上运行应用程序,并开始遵循这些指示来实现它.我实际上管理了 - 比如,10小时后 - 编译所有内容并获得演示程序的可运行二进制文件.但是,当我运行它时,我看到以下错误:
eglCreateWindowSurface: egl error "EGL_BAD_CONFIG" (0x3005)
Run Code Online (Sandbox Code Playgroud)
叹.在我付出努力之后,这不是我想要看到的.这似乎比应该更困难.
嵌入式GL环境真的是如此贫民窟,我必须使用一些供应商提供的BSP在目标上运行甚至是微不足道的程序吗?从对这个家伙的问题缺乏回应来判断,我认为答案可能是肯定的.但我甚至不关心加速度.我只是想在桌面PC上运行最愚蠢的OpenGL ES 2/OpenVG程序,并了解它的外观.(对我而言,PC是运行Linux还是Windows并不重要.)人们如何做这类事情?
这几乎是这个问题的重复; 然而,答案建议有没有解决我的问题,我不使用luaL_dostring()直接宏(虽然我正在使用相同的一对调用它扩展到).鉴于此计划:
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <lua.hpp>
static int _foo(lua_State* L)
{
lua_pushinteger(L, 1);
lua_pushinteger(L, 2);
lua_pushinteger(L, 3);
printf("In foo(): pushed %d elements...\n", lua_gettop(L));
return 3;
}
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
lua_pushcfunction(L, _foo);
lua_setglobal(L, "foo");
// This leaves three results on the stack...
lua_pushcfunction(L, _foo);
lua_pcall(L, 0, LUA_MULTRET, 0);
int nresults = lua_gettop(L);
printf("After foo(): %d results left on the stack...\n", nresults);
lua_settop(L, 0);
// …Run Code Online (Sandbox Code Playgroud) 最近,我设法将几个手动创建的作业转换为DSL脚本(内联到临时的“种子”作业中),并且感到惊讶,它是如此的简单。现在,我想摆脱多个种子工作,并尝试更整洁地构建事物。
为此,我创建了一个新的存储jenkins-ci库,并将所有Groovy DSL脚本提交给它。然后,我创建了一个job-generatorJenkins作业,该作业从存储jenkins-ci库中提取,并且只有一个Process Job DSLs步骤。此步骤已选中“在文件系统上查找”框,“ DSL脚本”字段设置为jobs/*.groovy。有了全局推送通知后,此操作或多或少地达到了预期的效果:如果我对存储库进行了更改jenkins-ci,该job-generator作业将自动运行并重新生成所有作业,真棒!
我对该解决方案不满意的是,它的参考位置很差:该作业的DSL脚本位于与代码完全独立的存储库中。我倒是真的很喜欢,是保持工作DSL脚本中的每个单独的代码库,在一个jenkins子文件夹,有一个单一的种子作业过程中他们所有。这样,就可以在代码旁边同时检查对CI设置的更改。对我来说,这就像是一个理想的设置。
不幸的是,我对如何实现这一目标尚无明确的想法。如果我能找到一种方法来使种子作业监视多个存储库,从而使对它们中任何一个的提交都将触发它,也许我可以在“ 处理作业DSL”步骤之前注入另一个构建步骤,并(以某种方式)编写脚本来胜利,但是...我不确定如何甚至得到这一点。(我当然不想只生成DSL脚本就对生成器作业中的每个仓库进行完整的克隆!)
我怀疑我不是第一个希望他们可以将Job DSL脚本与代码放在一起的人,尽管也许我高估了它的好处。感谢您提供有关该主题的任何建议!
我正在使用 RapidJSON 来解析(大致)符合JSON-RPC 的消息。以下是此类消息的示例:
{
"method": "increment",
"params": [ { "count": 42 } ]
}
Run Code Online (Sandbox Code Playgroud)
的内容params取决于 的值method,因此...我需要针对 的每个可能值针对不同的模式进行验证method。作为实现这一目标的一步,我创建了一个架构文档地图,以名称为键method:
std::unordered_map<std::string, rapidjson::SchemaDocument> schemas;
Run Code Online (Sandbox Code Playgroud)
我的意图是做这样的事情(将接收到的 JSON 解析为 RapidJSON 文档后doc):
if (schemas.find(doc["method"]) != schemas.end()) {
validate(doc, schemas[doc]);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我知道如何验证 a rapidjson::Document,但不知道如何验证GenericValue实例(据我所知,这是doc["method"]返回的内容)。
如何验证 RapidJSON 文档的片段或“子文档”?
更新/说明:感谢@wsxedcrfv的回答,我现在意识到我的陈述“我知道如何验证 a ”rapidjson::Document并不完全准确。我知道一种验证 a 的方法rapidjson::Document。但显然,有不止一种方法可以做到这一点。为了为后代清理这个问题,这里是validate()我原来的问题中缺少的函数:
bool validate(
rj::SchemaDocument const& schema,
rj::Document *doc,
std::string const& …Run Code Online (Sandbox Code Playgroud) 我经常通过将git repo嵌套在Subversion,Perforce或CVS沙箱中来使用git'guerrilla-style'。当我以这种方式工作时,我想在USB记忆棒上创建一个“远程”存储库,以便在硬盘死机的情况下进行备份:
$ git --bare init /f/projects/myproj.git
$ git remote add origin /f/projects/myproj.git
$ git push -u origin master
Run Code Online (Sandbox Code Playgroud)
然后,我只需要记住不时键入git push即可备份我的工作。如果我的回购被收回,我可以通过以下方式将其收回:
$ git clone /f/projects/myproj.git
Run Code Online (Sandbox Code Playgroud)
最近,我一直在使用StGit针对上游Perforce存储库维护一堆补丁程序。我的简单备份策略在这种情况下不再起作用。都不起作用git clone或stg clone似乎不起作用:如果我stg series在克隆后键入,它会告诉我stg series: master: branch not initialized。
翻看一下,我已经看到stgit创建了一个master.git分支和其他几个临时(??)分支来存储元数据。似乎应该可以进行设置,以便将所有这些分支都推送到备份存储库中,但是我不确定该如何处理。
更新 [2011年12月15日]:查看我要在qgit中备份的由stgit管理的存储库,我看到它看起来像这样:

我尝试了Jefromi的建议push --all:
$ git --bare init /f/projects/myproj.git
$ git remote add origin /f/projects/myproj.git
$ git push -u origin master
Run Code Online (Sandbox Code Playgroud)
这会推送master.stgit分支,但不会推送其他一些必需的元数据:

从上面的屏幕快照中,您可以看到原始存储库中有一个顶级patches文件夹和一个refs/patches文件夹,但备份中没有。所有这些使我相信我在树错树皮。有没有办法使用标准git命令备份StGit元数据?如果不是这样,在变基失败或硬盘驱动器出现故障的情况下,在复杂补丁系列中备份正在进行的工作的最佳方法是什么?
关于本网站的内存分配存在很多问题,但我找不到专门解决我关注问题的问题.这个问题 似乎最接近,它引导我阅读本文,所以......我比较了它在(虚拟)桌面x86 Linux系统和基于ARM的系统上包含的三个演示程序的行为.
我的发现在这里详述,但快速摘要是:在我的桌面系统上,demo3文章中的程序似乎表明malloc() 总是在于分配的内存量 - 即使禁用交换.例如,它高兴地"分配"3 GB的RAM,然后在程序开始实际写入所有内存时调用OOM杀手.在禁用交换的情况下,在写入仅有610 MB的3 GB malloc()可用空间后,将调用OOM杀手.
演示程序的目的是演示这个记录完备的Linux"功能",所以这一点都不太令人惊讶.但是我们基于i.MX6的嵌入式目标在工作中的行为是不同的,它malloc()似乎在说明它分配了多少RAM(?)下面的程序(从文章中逐字复制)总是会被OOM杀死第二个循环时i == n:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10000
int main (void) {
int i, n = 0;
char *pp[N];
for (n = 0; n < N; n++) {
pp[n] = malloc(1<<20);
if (pp[n] == NULL)
break;
}
printf("malloc failure after %d MiB\n", n);
for (i = 0; i < …Run Code Online (Sandbox Code Playgroud)