小编Siy*_*Ren的帖子

如何解决clang的Python绑定加载错误?

我正在尝试针对 clang 的 Python 绑定。我homebrew在 Mac OS X Maverics 上使用命令行安装了 LLVM 及其 python 绑定

 brew install llvm --with-clang --with-python --with-lld
Run Code Online (Sandbox Code Playgroud)

加载代码是

import clang
import clang.cindex

clang.cindex.Config.set_library_path('/usr/local/Cellar/llvm/3.5.0/lib')
index = clang.cindex.Index.create()
Run Code Online (Sandbox Code Playgroud)

但这会引发错误:

clang.cindex.LibclangError: dlopen(/usr/local/Cellar/llvm/3.5.0/lib/libclang.dylib, 6): 库未加载:@rpath/libLLVM-3.5.dylib 引用自:/usr/local/ Cellar/llvm/3.5.0/lib/libclang.dylib 原因:找不到图像。要提供 libclang 的路径,请使用 Config.set_library_path() 或 Config.set_library_file()。

但我不明白为什么会出现这个错误。@rpath这里不是指/usr/local/Cellar/llvm/3.5.0/lib吗?但有一个名为libLLVM-3.5.dylib该目录下。为什么此加载会导致错误以及如何修复它?

c++ python macos dll clang

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

为什么在乘法之前转置矩阵会导致极大的加速

我听说在乘法之前调换矩阵会因缓存局部性而大大加快操作速度.所以我写了一个简单的C++程序来测试它的行主要排序(编译需要C++ 11和boost).

结果令人惊讶:7.43秒对0.94秒.但我不明白为什么它会加速.实际上,在第二个版本(首先转置)中,乘法代码通过stride-1模式访问数据,并且具有比第一个更好的局部性.然而,为了转置矩阵B,必须非顺序地访问数据并且还导致许多高速缓存未命中.分配内存和复制数据的开销也应该是不可忽视的.那么为什么第二个版本如此加速代码呢?

#include <iostream>
#include <vector>
#include <boost/timer/timer.hpp>
#include <random>

std::vector<int> random_ints(size_t size)
{
    std::vector<int> result;
    result.reserve(size);
    std::random_device rd;
    std::mt19937 engine(rd());
    std::uniform_int_distribution<int> dist(0, 100);
    for (size_t i = 0; i < size; ++i)
        result.push_back(dist(engine));
    return result;
}

// matrix A: m x n; matrix B: n x p; matrix C: m x n;
std::vector<int> matrix_multiply1(const std::vector<int>& A, const std::vector<int>& B, size_t m, size_t n, size_t p)
{
    boost::timer::auto_cpu_timer t;
    std::vector<int> C(m * p);
    for (size_t i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c++ optimization matrix-multiplication

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

为什么我用 Boost.ASIO 实现的简单 HTTP 服务器需要睡眠才能正常工作

我正在尝试使用 Boost.Asio 编写一个非常简单的 HTTP 服务器。这是代码(与 Boost.Asio 教程中的示例几乎相同)

#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <thread>
#include <chrono>

using boost::asio::ip::tcp;

int main()
{
    try
    {
        boost::asio::io_service io_service;

        tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 12345));

        for (;;)
        {
            tcp::socket socket(io_service);
            acceptor.accept(socket);

            const char message[] = "HTTP/1.0 200 OK\r\n\r\n<html><body><i>Hello, world</i></body></html>";

            boost::system::error_code ignored_error;
            boost::asio::write(socket, boost::asio::buffer(message), ignored_error);
        }
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行此示例时,我尝试使用地址 127.0.0.1:12345 的 Chrome,但它显示“此网页不可用”。但是,如果我在调试器中逐步启动,它会正确显示斜体“Hello,world”。事实上,如果我std::this_thread::sleep_for(std::chrono::seconds(1));在写入操作后添加一行,它就会正常工作。我究竟做错了什么?有没有办法避免这种丑陋的黑客行为?

我在 Windows 7 上使用 Visual Studio 2013。编译为 64 位代码。

c++ networking boost boost-asio

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

为什么 QStringLiteral 返回一个乱码字符串

我正在编写一个中文软件,并在源文件中嵌入了一些字符串。为了减少运行时开销(嗯,实际上这是过早的优化,因为速度差异可以忽略不计,但我很好奇),当我使用QStringLiteral汉字时,例如

QString s = QStringLiteral("??");
Run Code Online (Sandbox Code Playgroud)

字符串显示在屏幕上时出现乱码;但如果我只是使用

QString s = "??";
Run Code Online (Sandbox Code Playgroud)

它工作正常。但是后者在运行时而不是编译时构造字符串,所以它有点慢。有人可以告诉我如何解决这个问题吗?

我的源文件编码是没有 BOM 的 UTF8;编译器是 MSVC 2010 Express with SP1。我也试过

#pragma execution_character_set("utf-8")
Run Code Online (Sandbox Code Playgroud)

无济于事。

c++ unicode qt

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

gcc的__sync和__atomic内在函数之间有什么区别?

我正在编写一个玩具操作系统(所以我不能使用任何库,包括标准的库),用gcc编译,我想使用atomics作为一些同步代码.经过一些搜索,我发现gcc有两组用于原子操作的内置函数__sync_*__atomic_*,但没有关于两者之间差异的信息.

除了后者有一个内存排序参数之外,这两者有什么区别?__sync_版本是否等同于__atomic_顺序排序的版本?该__sync_版本是否被弃用以支持该版本__atomic_

c gcc synchronization atomic

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

最小编辑距离的动态编程方法的正确性证明

为了计算最小编辑距离(将一个单词转换为另一个单词所需的最小插入,删除和替换量),一种动态编程解决方案基于递归关系,在该关系中将检查两个字符串的最后一个字符。详细信息在https://en.wikipedia.org/wiki/Wagner%E2%80%93Fischer_algorithm中

关于编辑距离,该算法的描述在Internet上无处不在,但是所有这些都只是断言其正确性而没有证据。通过定义编辑距离,您可以在中间而不是仅在末尾插入,删除或替换字符。那么如何证明这种递归关系确实成立?

language-agnostic algorithm dynamic-programming

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

如何在 Qt 中正确使用 adjustmentSize()

我是 Qt 新手,这个关于自动调整大小的问题让我发疯。

我创建了一个名为RenderArea继承的类QWidget。在其中paintEvent(),我使用 aQPainter来绘制图像。为了使整个窗口与图像一起缩放,我在绘画之前调整大小。相关代码是

if (image && !image->isNull())
{
    resize(image->size());
    painter.drawImage(image->rect(), *image, image->rect());
}
Run Code Online (Sandbox Code Playgroud)

但是,RenderArea会通过其他小部件(如按钮和菜单)拉伸太多。它包含在centralWidget垂直布局中。但是当我调用它时centralWidget->adjustSize(),它不会将所有内容缩放到一起,而是缩小RenderAreat 并隐藏图像。

如何指示中央小部件以及窗口根据自定义小部件的新尺寸进行缩放?我知道我可以使用 aQLabel并将其设置scaledContents为 true,但我需要很多其他复杂的渲染,因此简单的渲染QLabel是不够的。

c++ user-interface qt

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

读取套接字中的缓冲区

如果read()的返回值与缓冲区大小相同,我该如何阅读其余信息?如果再次调用read,它会读取下一个数据块,还是从头开始读取,还是未读入缓冲区的信息永久丢失?

c sockets glibc

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

在pthread_mutex_destroy之后我是否需要使用delete

假设我使用

pthread_mutex_t *m = new pthread_mutex_t;
pthread_mutex_init(m, NULL);
Run Code Online (Sandbox Code Playgroud)

初始化互斥锁.在我完成之后,调用pthread_mutex_destroy,我是否需要使用

delete m;
Run Code Online (Sandbox Code Playgroud)

释放所有资源?

c++ multithreading pthreads

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