请告诉我,如何检查OpenSSL是否支持/使用Intel AES-NI?
我从主干版GCC-4.7.0构建了MinGW:http://code.google.com/p/mingw-builds/downloads/list
在对此版本的更改的描述中,可以说实现了非静态数据成员初始化程序:http://gcc.gnu.org/gcc-4.7/changes.html
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
当我尝试编译这样一个例子时:
#include <iostream>
#include <string>
struct type {
type()
:i(33)
{}
int i;
std::string s("string");
};
int main() {
type t;
std::cout << t.i << " : " << t.s << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到了很多错误,最后这个错误:
main.cpp:16:35:注意:'std :: string(type :: )(int){aka std :: basic_string(type ::)(int)}'不是从'const std :: basic_string <派生的_CharT,_Traits,_Alloc>'main.cpp:16:35:注意:无法解析重载函数't.type :: s'中的地址
但根据文档,代码是正确的.
当我尝试使用带有boost :: asio :: buffer的std :: string时,我收到以下错误消息:
boost/asio/detail/consume_buffers.hpp:在构造函数'boost :: asio :: detail :: consume_buffers <boost :: asio :: mutable_buffer,boost :: asio :: const_buffers_1
:: consume_buffers(const boost :: asio :: const_buffers_1&)':boost/asio/impl/read.hpp:140:25:
从'boost :: asio :: detail :: read_op <boost :: asio ::实例化basic_stream_socket,boost :: asio :: const_buffers_1,boost :: asio :: detail :: transfer_all_t,boost :: _ bi :: bind_t <void,boost :: _ mfi :: mf1,boost :: _ bi :: list2,boost :: arg <1>(*)()>:: read_op(boost :: asio :: basic_stream_socket&,const boost :: asio :: …
我需要使用一个字符串作为ID来获取一些对象.在运行时实现这一点,并且运行良好.但由于显而易见的原因,这使得静态类型检查变得不可能.
我用Google搜索了在编译时计算字符串的哈希和的算法:使用Boost.MPL进行C++编译时字符串哈希.
它似乎是我的问题的完美解决方案,除了算法所必需的sring应该被分成4个字符或逐个字符,显而易见的原因.
即,而不是通常的ID的当前记录,我将不得不这样写:
hash_cstring<boost::mpl::string<'obje', 'ct.m', 'etho', 'd'>>::value
Run Code Online (Sandbox Code Playgroud)
这绝对无法使用.
问题是,如何正确传递诸如"object.method"此算法的字符串?
谢谢你们.
我尝试使用静态链接工具链库构建程序.我通过:
LDFLAGS="-Wl,-Bstatic -lwinpthread -Wl,-Bdynamic -static-libgcc -static-libstdc++"
Run Code Online (Sandbox Code Playgroud)
但程序与共享相关联libwinpthread-1.dll.
我做错了什么?
我得到静态链接libwinpthreads的唯一方法是传递-static给LDFLAGS.但它打破了插件系统的构建程序.
我使用MinGW-builds项目中的mingw-w64 + GCC-4.7.2:http://sourceforge.net/projects/mingwbuilds/
我需要为dlsym()和dlopen()系统调用实现钩子.为了从钩子调用原始的dlsym(),我需要获取这个系统调用的地址.我尝试在so-library-constructor-function中获取地址.但我只得到钩子函数的地址.我试图指定为RTLD_DEFAULT的处理程序,以及RTLD_NEXT.使用RTLD_DEFAULT时,我得到NULL.使用RTLD_NEXT时,我得到了钩子函数的地址.dlopen()我不能用于同样的原因,因为我在dlopen()上有钩子.
请告诉我,如何获取原始dlopen()和dlsym()函数的地址?
谢谢.
以下代码:
/***************************************************************************/
boost::mutex m;
struct func {
func(int v):n(v) {}
void operator()() {
{ boost::mutex::scoped_lock l(m);
std::cout << "run function " << n << std::endl;
}
for ( int idx = 0; idx < 4; ++idx ) {
{ boost::mutex::scoped_lock l(m);
std::cout << "function " << n << ", ping " << idx << std::endl;
}
sleep(1);
}
}
private:
int n;
};
/***************************************************************************/
int main(int argv, const char** argc) {
boost::asio::io_service io;
for ( int idx = 0; idx …Run Code Online (Sandbox Code Playgroud) 我如何连接boost :: mpl :: string?以下代码产生错误:
#include <iostream>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/string.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/push_back.hpp>
typedef boost::mpl::vector<
boost::mpl::string<'ab'>,
boost::mpl::string<'cd'>,
boost::mpl::string<'ef'>
> slist;
typedef boost::mpl::fold<
slist,
boost::mpl::string<>,
boost::mpl::push_back<boost::mpl::_1, boost::mpl::_2>
>::type string;
int main() {
std::cout << boost::mpl::c_str<string>::value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
完整来源:http://liveworkspace.org/code/31902a4b1b0831d054119bc0b8923cb6 错误:
在source.cpp中包含的文件中:3:0:string.hpp:在'boost :: mpl :: push_back_impl <boost :: mpl :: string_tag的实例化中
:: apply,boost :: mpl :: string <24930 >>':boost/mpl/push_back.hpp:32:1:
从'boost :: mpl :: push_back <boost :: mpl :: string <>实例化, boost :: mpl :: string …
最近,在gcc-trunk中实现了"用户定义的文字".请告诉我,我是否正确理解我无法为可变参数字符模板定义"用户定义的文字"?
template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << "method"_call;
Run Code Online (Sandbox Code Playgroud)
向上.
我不明白为什么允许这个表达式:
template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << 12345566_call;
Run Code Online (Sandbox Code Playgroud)
这个是不允许的:
template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << method_call;
Run Code Online (Sandbox Code Playgroud)
?
重点是什么?
向上. 这是因为含糊不清?
谢谢.
关于C++预处理器的一些问题: