小编Chr*_*ris的帖子

如何在Windows上构建64位MinGW Qt应用程序(使用Qt Creator)

我正在寻找(并且肯定我不是唯一一个)在Windows上构建基于MinGW的64位Qt程序的最直接方式.直线向前意味着最小的努力和时间(例如,用于建造和设置).目前,我使用MinGW/OpenGL和QtCreator运行qt-project.org网站的常规官方开发环境,适用于Windows 32位.当然我已经阅读了qt-project.org的(未完成的...)64位维基页面,我也阅读了不同的stackoverflow问题,但我仍然感到困惑.我知道如何在其他帖子中处理如何构建64位Qt的主题,但这不是我的问题,我需要的是概述和最有利的64位MinGW端口.

让我感到困惑的一件事是,来自mingwbuilds sourceforge项目的"x64-Qt-5.2.1 + QTCreator-3.0.1-(gcc-4.8.2-seh).7z"包中的DLL似乎是32位.

为了澄清我的问题,我还要问一些相关的问题:

  • 我是否需要首先构建64位开发环境以生成64位可执行文件,还是可以保持正常的默认环境并仅使用64位工具链交换MinGW工具链?
  • 我在哪里可以获得用于部署的64位Qt库,或者我是否还需要自己构建它们?或者我在哪里可以获得包括64位库在内的64位开发环境?
  • 如果我必须自己构建,哪个MinGW 64位端口最有利?

非常感谢你的帮助.

windows 64-bit qt mingw

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

原始套接字访问作为Linux 2.4上的普通用户

在嵌入式系统(2.4内核)中,我需要从不以root身份运行的进程对eth0接口进行原始套接字访问.

我尝试通过从命令行设置CAP_NET_RAW功能并使用cap_set_proc()以编程方式解决此问题,两者都没有成功.在我得到EPERM错误的程序中,似乎我没有权限这样做,在命令行上

无法在进程"1586"上设置上限:(不允许操作)

有没有更简单的方法来做我想要的?如果没有,成功设置CAP_NET_RAW功能需要哪些步骤?

编辑:我有root访问权限,但以root身份永久运行该进程是没有选择的.libcap的版本是1.10,没有'setcap'二进制文件,而是'setpcaps'.

编辑 - 回答George Skoptsov:

如果我说得对,你的建议是用setuid启动一个进程,然后设置CAP_NET_RAW功能,然后删除权限.我尝试使用以下代码,但它似乎不起作用,即使caps命令不返回错误.在seteuid()注释掉后,原始访问可以正常工作,但只有当进程以root身份运行时才会生效:

cap_t caps = cap_get_proc();
cap_value_t cap_list[1];
cap_list[0] = CAP_NET_RAW;
if (cap_set_flag(caps, CAP_EFFECTIVE, 1, cap_list, CAP_SET) == -1)
{
    printf("cap_set_flag error");
}
if (cap_set_proc(caps) == -1)
{
    printf("cap_set_proc error");
}

if (seteuid(getuid()) != 0) 
{
    printf("seteuid error");
}

function_that_needs_raw_access();
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.克里斯

sockets linux raw-ethernet

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

script-file vs命令行:rsync和--exclude

我有一个简单的测试bash脚本,看起来像这样:

#!/bin/bash

cmd="rsync -rv --exclude '*~' ./dir ./new"
$cmd # execute command
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,它也会复制以a结尾的文件,~即使我想要排除它们.当我直接从命令行运行相同的rsync命令时,它可以工作!有人知道为什么以及如何使bash脚本工作?

顺便说一句,我知道我也可以合作,--exclude-from但我想知道它是如何工作的.

bash rsync

8
推荐指数
2
解决办法
4505
查看次数

糟糕:坏区的内核访问,sig:11 - 'swapper' - 杀死中断处理程序

在嵌入式 linux 环境(PowerPC 上定制的 2.4.25)中,几个小时后我得到以下内核恐慌:

Oops: kernel access of bad area, sig: 11
NIP: C9471C7C XER: 20000000 LR: C0018C74 SP: C0198E20 REGS: c0198d70 TRAP: 0800    Not tainted
MSR: 00009030 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 11
DEAR: C9876FFF, ESR: 00000000
TASK = c0197020[0] 'swapper' Last syscall: 120
last math 00000000 last altivec 00000000
PLB0: bear= 0x48041040 acr=   0x00000000 besr=  0x00000000
PLB0 to OPB: bear= 0x00cc1000 besr0= 0x00000000 besr1= 0x00000000

GPR00: 00000000 C0198E20 C0197020 00000000 C016E494 000000C2 C01D0000 …
Run Code Online (Sandbox Code Playgroud)

linux kernel powerpc linux-kernel

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

如何强制编译器使用显式复制构造函数?

我用一个包含自定义构造函数,析构函数,复制构造函数和赋值运算符的示例类编写了一个小测试程序.当我意识到复制构造函数根本没有被调用时,我感到很惊讶,即使我实现了具有类的返回值和类似行的函数Object o1; Object o2(o1);

innerclass.hpp:

#include <iostream>

class OuterClass
{
public:
OuterClass()
{
    std::cout << "OuterClass Constructor" << std::endl;
}
~OuterClass()
{
    std::cout << "OuterClass Destructor" << std::endl;
}
OuterClass(const OuterClass & rhs)
{
    std::cout << "OuterClass Copy" << std::endl;
}
OuterClass & operator=(const OuterClass & rhs)
{
    std::cout << "OuterClass Assignment" << std::endl;
}

class InnerClass
{
public:
    InnerClass() : m_int(0)
    {
        std::cout << "InnerClass Constructor" << std::endl;
    }
    InnerClass(const InnerClass & rhs) : m_int(rhs.m_int)
    {
        std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++

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

我在QWinTaskbarProgress做错了什么?

我按照我发现的例子来使用QWinTaskbarProgress.我Qt Widgets ApplicationQt Creator(Qt 5.3.1)中创建了一个标准,我mainwindow.cpp看起来像这样:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_taskbarButton = new QWinTaskbarButton(this);
    m_taskbarButton->setWindow(windowHandle());
    m_taskbarButton->setOverlayIcon(style()->standardIcon(QStyle::SP_MediaPlay));

    m_taskbarProgress = m_taskbarButton->progress();
    m_taskbarProgress->setVisible(true);
    m_taskbarProgress->setRange(0, 100);
    m_taskbarProgress->setValue(50);
}

MainWindow::~MainWindow()
{
    delete ui;
}
Run Code Online (Sandbox Code Playgroud)

我希望50%在启动应用程序后覆盖任务栏图标并显示进度条,但任务栏看起来很正常,就好像没有编写任何代码一样.我究竟做错了什么?

c++ qt qtwinextras

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

标签 统计

c++ ×2

linux ×2

qt ×2

64-bit ×1

bash ×1

kernel ×1

linux-kernel ×1

mingw ×1

powerpc ×1

qtwinextras ×1

raw-ethernet ×1

rsync ×1

sockets ×1

windows ×1