小编Krz*_*eld的帖子

有状态lambda的问题 - Microsoft编译器版本19.16.27024.1

嗨我有状态lambda表达式的问题.

这是一个虚拟的例子,但在我看来,ms编译器做错了什么,或者我有一些未定义的行为?

码:

int main() {

    auto start = [x = 1, z = 1]() mutable {
        goto resume;
        for (; ; ++z) {
            for (x = 1; x < z; ++x) {
            resume:
                std::cout << z;
                if (z > 3)
                    return 1;
            }
        }
    };

    start();
}
Run Code Online (Sandbox Code Playgroud)

Microsoft编译器版本19.16.27024.1

cl -O2/std:c ++ 17(或-O1,-Ox)----->打印'1'然后打印无限数'2'(错误我认为)

cl -Od/std:c ++ 17 ----->打印12334

g ++(Ubuntu 7.3.0-27ubuntu1~18.04)7.3.0

g ++ -03 ----->打印12334

clang version 8.0.0(trunk)clang ++ -O3 ----->打印12334

https://godbolt.org/z/wsHYA-(代码但没有std :: cout)

删除for循环后(这个带有x变量)问题不再可见; 如果somone想知道我为什么编写这样的代码 - 我想模仿协同程序等的行为(没有什么严重的,例如序列生成器)

c++ lambda compiler-bug

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

Emsripten编译的Qt应用程序不显示图像

我有一些Qt国际象棋应用程序。当我使用VS编译器或gcc进行构建时,一切正常,但是使用emscripten的Web程序集版本存在问题。当我使用emrun运行html时,一切正常,但图像未显示出来。

我的emscripten版本是emcc(Emscripten gcc / clang-like替换)1.38.30(commit d33f7a29002a2463a7956cd53a559b97a52f9560)。

我的qmake版本:QMake 3.1版

我的Qt版本:使用Qt版本5.13.0

我正在使用来自wasm的在线linux安装程序的官方Qt二进制文件。

我正在使用emrun --no_browser .html命令在本地主机上设置服务器。

我尝试了各种路径规范。我最终得到了这个代码示例,可以正常运行,但不适用于Web程序集版本。这是加载示例图像的代码。

...
QDir::setSearchPaths("qrc", QStringList(":/"));
return QIcon(QUrl("qrc:///Images/king_white.svg").toString());
Run Code Online (Sandbox Code Playgroud)

这是我的.qrc文件:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file>Images/king_black.svg</file>
    ...
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)

在.pro文件中,我还有:

RESOURCES = resources.qrc
Run Code Online (Sandbox Code Playgroud)

当我不使用emscripten时,它可以正常工作。感谢帮助。

编辑:构建选项(从qmake生成的Makefile中)

CC            = emcc
CXX           = em++
DEFINES       = -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
CFLAGS        = -pipe -O3 -s ALLOW_MEMORY_GROWTH=1 -Wall -W $(DEFINES)
CXXFLAGS      = -pipe -O3 -std=gnu++1y -s ALLOW_MEMORY_GROWTH=1 -Wall -W $(DEFINES)
INCPATH       = -I. -I../../Qt513/5.13.0/wasm_32/include -I../../Qt513/5.13.0/wasm_32/include/QtWidgets -I../../Qt513/5.13.0/wasm_32/include/QtGui -I../../Qt513/5.13.0/wasm_32/include/QtCore -I. -I/home/somas/.emscripten_ports/openssl/include -I../../Qt513/5.13.0/wasm_32/mkspecs/wasm-emscripten
QMAKE         = /home/somas/Qt513/5.13.0/wasm_32/bin/qmake
DEL_FILE      = …
Run Code Online (Sandbox Code Playgroud)

c++ qt emscripten

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

标签 统计

c++ ×2

compiler-bug ×1

emscripten ×1

lambda ×1

qt ×1