小编Sző*_*lcs的帖子

Windows和Linux上的C++ [[gnu :: visibility("default")]] vs __declspec(dllexport)

我需要在C++中创建一些共享库,并使用linux作为我的开发人员操作系统.我知道如果我想通过dlsym/ 加载它们,我需要使符号可见LoadLibrary.所以在linux中我的所有符号都遵循这种模式:

extern "C" [[gnu::visibility("default")]] void f();
Run Code Online (Sandbox Code Playgroud)

我使用了启用了C++ 11的clang,我能够加载f我的宿主程序.当我移动到Windows时,我使用GCC 4.8.2启用了C++ 11,并且该模式也适用于Windows机器LoadLibrary.(我需要使用C++ 11来获取新的属性语法).我知道在Windows上我需要用来__declspec(dllexport)从共享库中导出符号.所以现在怎么办?是__declspec(dllexport)不是不再需要?

编辑:

我发现在这里,那些是同义词(我认为),所以问题是,是否有一个[[gnu::attribute]]用于__declspec(dllimport)避免使用宏和ifdefS代表具体的目标?

c++ attributes visibility declspec

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

在Clang中设置为默认C++ 11

LLVM C++编译器完全支持C++ 11标准.有没有办法将C++ 11设置为默认标准,而不是-std=c++11每次都添加编译器标志?我尝试将CCXFLAGS环境变量设置为-std=c++11,但没有运气.

standards clang c++11

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

将 QComboBox::currentIndexChanged(int) 连接到 QSignalMapper::map()

我想弄清楚如何在 Qt5 中实现这一点:

connect(qcombobox, SIGNAL(currentIndexChanged(int),
        qsignalmappe, SLOT(map()));
Run Code Online (Sandbox Code Playgroud)

我试过这个:

connect(comboBox, static_cast<void(QComboBox::*)(int) (&QComboBox::currentIndexChanged),
        this->signalMapper, &QSignalMapper::map);
Run Code Online (Sandbox Code Playgroud)

但是编译器抱怨没有匹配的参数。我知道 QSignalMapper::map() 信号没有参数,但我不知道它如何使用旧语法。

c++ qt signals mapper

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

标签 统计

c++ ×2

attributes ×1

c++11 ×1

clang ×1

declspec ×1

mapper ×1

qt ×1

signals ×1

standards ×1

visibility ×1