首先,我相信,这不是一个重复的问题.我不想用NDK编写本机应用程序,我只想将Android设备用作廉价的Linux 服务器.在此上下文中,服务器表示没有UI的程序.此外,服务器是用裸C++编写的,但根本不使用任何库,所以这就是为什么这个问题与其他问题不同.
故事
我们为Linux编写了一个小型服务器,它有一个webserver接口,所以你用一个vanilla浏览器连接它,你可以玩它.我们已将其编译为Linux/x86,Linux/ARM(GuruPlug),Linux/PPC(某种NAS)和Mac OS X Darwin平台.
Linux/ARM版本在我的PalmPré智能手机上运行良好.我刚刚将可执行文件复制到我的手机上(在webOS场景中,没有像越狱这样的东西,有一个官方的"开发者模式",如果你通过输入一个密钥组合激活,你可以用ssh登录你的手机或使用本地ssh应用程序).因此,即使是最小的Linux设备,我们的小型服务器程序(守护程序,可能会说)也在运行.(将千兆级桌面计算机的浏览器连接到智能手机服务器时,这很有趣.)
服务器程序设计为即使在最小的Linux上运行(正如我所说,它运行在NAS,路由器,智能手机上),它只需要STDLIB和PTHREADS.
这个问题
在Android设备上运行简单的服务器程序的直接方法是什么?
所以,我想用Andrid设备(手机,平板电脑)做同样的事情,就像我在我的webOS设备上做的那样:复制服务器程序并运行它.计算机就是这样,运行程序,不是吗?;)
我有一个用C++编写的异步数据流系统.在数据流体系结构中,应用程序是一组组件实例,它们在启动时初始化,然后它们使用预定义的消息相互通信.有一种称为Pulsar的组件类型,它为连接到其中一个组件的其他组件提供"时钟信号消息"(例如,延迟).它每隔X ms触发一次消息(调用数据流调度程序API),其中X是"frequency"参数的值,以ms为单位.
简而言之,任务只是在每X ms调用一个函数(方法).问题是:最好/官方的方式是什么?它有什么模式吗?
我找到了一些方法:
也许,最好的答案是音频/视频播放器的源代码(我自己无法找到/理解)的一个简短评论部分.
更新(由@MSalters请求):DF项目的共同作者正在使用Mac OSX,因此我们应该找到适用于大多数Posix-Compilant操作系统的解决方案.系统,不仅仅是在Linux上.也许,将来会有一个使用BSD的目标设备,或者一些受限制的Linux.
(编辑:删除了所有不必要的信息,添加了Windows10体验,将Ubuntu上的CLANG升级到相同版本,由于旧的CLANG版本而删除了Debian10)
\n我创建了一个非常简单的 WASM 模块,
\n在 Ubuntu21 上,链接器生成长度正确但全是零的文件:
\n$ hexdump inc.wasm\n0000000 0000 0000 0000 0000 0000 0000 0000 0000\n*\n0000130 0000 0000 0000 0000 0000 0000 0000\n000013e\n
Run Code Online (Sandbox Code Playgroud)\n编译器还会生成一个名为 like 的临时文件inc.wasm.tmp611a2df
,该文件与结果相同inc.wasm
、大小相同、内容为零。
编译命令:
\nclang++ \\\n --target=wasm32 \\\n -nostdlib \\\n -O3 \\\n -o /tmp/inc.o \\\n -c \\\n inc.cpp\n …
Run Code Online (Sandbox Code Playgroud) 我的程序在Linux上控制外部应用程序,通过管道将输入命令传递到外部应用程序stdin,并通过外部应用程序stdout的管道读取输出结果.
问题是对管道的写入是按块缓冲的,而不是按行缓冲的,因此在我的应用程序接收外部应用程序输出数据之前会发生延迟.无法更改外部应用程序以添加显式fflush()调用.
当我将外部应用程序设置为/ bin/cat -n(它回显输入,添加了行号)时,它正常工作,看起来,猫在每行之后刷新.强制外部应用程序刷新的唯一方法是向它发送exit命令; 当它收到命令时,它会刷新,所有答案都会在退出之前出现在标准输出上.
我很确定,Unix管道对于那种进程间通信(伪服务器 - 客户端)来说是合适的解决方案,但也许我错了.
(我刚刚从一个类似的问题中复制了一些文本:使用Python强制另一个程序的标准输出无缓冲)