小编tre*_*nki的帖子

CMake多个工具链和目标平台

我正在从普通品牌转变为CMake作为项目的构建系统.该项目应该在不同的嵌入式Linux系统上运行,每个系统都有自己的工具链,并且每个目标也有相当多的不同配置选项(例如,不同的预处理器定义和包含/排除的一些源).它也应该在桌面Linux上工作,一些GUI模块必须在Windows上运行.

现在,CMake有其CMAKE_TOOLCHAIN_FILE选择可用于分解每个嵌入式平台的工具链和编译器特定的东西(桌面Linux和Windows不应该需要).

我想把除了CMake Wiki上列出的东西放在工具链文件中的东西不是一个好主意.

我正在考虑创建一些可以由cmake gui工具编辑的CMake变量,然后简单地if/elseif用来确定正确的设置.

有没有人有更好或更优雅的建议?

c cross-platform makefile multiplatform cmake

5
推荐指数
1
解决办法
2979
查看次数

Linux服务器套接字-错误的文件描述符

我在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)

c sockets linux

5
推荐指数
2
解决办法
2万
查看次数

什么(最小)C 图形库提供这些功能

我必须更换 Linux 嵌入式应用程序中的 nano-X 内容,并且需要一些绘图功能的替代品Arc, Rect, FillRect, Ellipse, FillEllipse, Line, Text, DrawImageFromFile

有谁知道我可以用一个合适的开源库来替换它们?理想情况下,它应该与 16 位颜色的像素缓冲区一起工作,以便可以写入 Linux 帧缓冲区设备。

我考虑过libcairo,但这对于这个目的来说是一个相当大的包。未来计划使用 Qt 4.7,我确信它包含必要的绘图功能。我应该直接去吗?

c linux embedded graphics

4
推荐指数
1
解决办法
2360
查看次数

让Qt VNC服务器工作

为嵌入式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服务器和标准内容,或者我是否必须找到另一种解决方案?

qt vnc vnc-server

3
推荐指数
1
解决办法
9254
查看次数

OpenSSL base64 解码 - BIO_read 返回 0

我使用下面的代码,其中我使用内存缓冲区中的 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)

c++ base64 openssl

3
推荐指数
1
解决办法
3046
查看次数

C ++ / CLI并使用System :: Linq无法正常工作

我在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)

如何使它工作?

.net c++-cli

1
推荐指数
1
解决办法
1399
查看次数