我正在从普通品牌转变为CMake作为项目的构建系统.该项目应该在不同的嵌入式Linux系统上运行,每个系统都有自己的工具链,并且每个目标也有相当多的不同配置选项(例如,不同的预处理器定义和包含/排除的一些源).它也应该在桌面Linux上工作,一些GUI模块必须在Windows上运行.
现在,CMake有其CMAKE_TOOLCHAIN_FILE选择可用于分解每个嵌入式平台的工具链和编译器特定的东西(桌面Linux和Windows不应该需要).
我想把除了CMake Wiki上列出的东西放在工具链文件中的东西不是一个好主意.
我正在考虑创建一些可以由cmake gui工具编辑的CMake变量,然后简单地if/elseif用来确定正确的设置.
有没有人有更好或更优雅的建议?
我在Linux下的服务器套接字有问题。由于某种我不知道的原因,服务器套接字消失了,我Bad file descriptor在等待传入连接的select调用中遇到错误。当我在其他线程中关闭不相关的套接字连接时,总是会出现此问题。这在带有2.6.36内核的嵌入式Linux上发生。
有谁知道为什么会这样?服务器套接字会完全消失,这是否正常Bad file descriptor?
编辑:
其他套接字代码实现了VNC服务器,并在完全不同的线程中运行。其他代码中唯一的特殊之处是使用,setjmp/longjmp但这不应该成为问题。
创建服务器套接字的代码如下:
int server_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
struct sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
saddr.sin_port = htons(1234);
const int optionval = 1;
setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &optionval, sizeof(optionval));
if (bind(server_socket, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) {
perror("bind");
return 0;
}
if (listen(server_socket, 1) < 0) {
perror("listen");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我等待使用以下代码的传入连接:
static int WaitForConnection(int server_socket, struct timeval *timeout)
{
fd_set …Run Code Online (Sandbox Code Playgroud) 我必须更换 Linux 嵌入式应用程序中的 nano-X 内容,并且需要一些绘图功能的替代品Arc, Rect, FillRect, Ellipse, FillEllipse, Line, Text, DrawImageFromFile。
有谁知道我可以用一个合适的开源库来替换它们?理想情况下,它应该与 16 位颜色的像素缓冲区一起工作,以便可以写入 Linux 帧缓冲区设备。
我考虑过libcairo,但这对于这个目的来说是一个相当大的包。未来计划使用 Qt 4.7,我确信它包含必要的绘图功能。我应该直接去吗?
我为嵌入式Linux编译并安装了Qt,并确保-qt-gfx-vnc在该./configure行中使用.
我用以下代码启动我的应用程序.
int argc = 1;
char *argv[] = { "appname", "-display", "VNC:0" };
QApplication app(argc, argv, QApplication::GuiServer);
Run Code Online (Sandbox Code Playgroud)
如果没有"-display", "VNC:0"选项,应用程序将使用嵌入式设备的显示器工作,但使用这些选项a QVNCServer将在端口5900上创建,并且不会再显示任何内容.尝试使用Ubuntu的Remove Desktop Viewer进行连接不起作用.它只给出一个黑屏,没有错误信息.
对于我的应用程序,我需要一个活动的VNC服务器,同时GUI被渲染到嵌入式显示器.理想情况下,我还希望能够在我的应用程序中启用/禁用VNC服务器.我还需要能够进行一些用户身份验证.
是否可以qws使用Qt同时运行VNC服务器和标准内容,或者我是否必须找到另一种解决方案?
我使用下面的代码,其中我使用内存缓冲区中的 BIO_read 进行 base64 解码。有时BIO_read返回0大小参数。我还无法弄清楚为什么会发生这种情况。有任何想法吗?
static std::vector<unsigned char> base64_decode(void *input, int length)
{
std::vector<unsigned char> result(length, 0);
BIO *b64, *bmem;
b64 = BIO_new(BIO_f_base64());
bmem = BIO_new_mem_buf(input, length);
bmem = BIO_push(b64, bmem);
int size = BIO_read(bmem, &result[0], length);
if (size == 0)
fprintf(stderr, "Problem\n");
result.resize(size);
BIO_free_all(bmem);
return result;
}
Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2015中创建了一个新的C ++ CLR项目,并想尝试在C ++中使用Linq功能。为此,我想包含名称空间System :: Linq。不幸的是VS声称
Error C2039 'Linq': is not a member of 'System' ConsoleApplication1
Run Code Online (Sandbox Code Playgroud)
这是整个代码:
using namespace System;
using namespace System::Linq;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何使它工作?