我需要在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代表具体的目标?
LLVM C++编译器完全支持C++ 11标准.有没有办法将C++ 11设置为默认标准,而不是-std=c++11每次都添加编译器标志?我尝试将CCXFLAGS环境变量设置为-std=c++11,但没有运气.
我想弄清楚如何在 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++ ×2
attributes ×1
c++11 ×1
clang ×1
declspec ×1
mapper ×1
qt ×1
signals ×1
standards ×1
visibility ×1