我已经下载了最新的OpenSSL源代码包.我想用VC++ 2010 x64构建它.按照说明似乎不起作用.配置步骤看起来很好,但随后:
C:\ 1> MS\do_win64a.bat
C:\ 1> perl util\mkfiles.pl 1> MINFO
C:\ 1> perl ms\uplink.pl win64a 1> ms\uptable.asm
C:\ 1> ml64 -c -Foms\uptable.obj ms\uptable.asm Microsoft(R)宏汇编程序(x64)版本10.00.30319.01版权所有(C)Microsoft Corporation.版权所有.
组装:ms\uptable.asm
C:\ 1> perl util\mk1mf.pl no-asm VC-WIN64A 1> ms \nt.mak在util\mk1mf.pl第907行没有关于crypto\md4的规则.
C:\ 1> perl util\mk1mf.pl dll no-asm VC-WIN64A 1> ms \ntdll.mak在util\mk1mf.pl第907行没有关于crypto\md4的规则.
C:\ 1> perl util\mkdef.pl 32 libeay 1> ms\libeay32.def
C:\ 1> perl util\mkdef.pl 32 ssleay 1> ms\ssleay32.def
Win 32(do_ms)输出看起来有点不同,但"在util\mk1mf.pl第907行没有加密\ md4的规则"仍然存在.
任何人都可以帮助我构建库或共享vc2010构建的二进制文件吗?或者是库的VS2010项目文件?
考虑这个变量声明:
union {
struct {
float x, y, z, padding;
} components;
__m128 sse;
} _data;
Run Code Online (Sandbox Code Playgroud)
我的想法是通过赋值x,y,z领域,执行SSE2计算,并通过读取结果x,y,z.不过,我对它是否合法有些怀疑.我关心的是对齐:MSDN说__m128变量自动对齐到16字节边界,我想知道我的联盟是否可以破坏这种行为.这里还有其他陷阱需要考虑吗?
如何std::has_virtual_destructor实施和类似的检查?我已经尝试type_traits在Visual Studio中查看标题,但是有太多的宏和模板甚至可以得到一个想法.这种检查可以用任何合理简单的形式表达吗?我很想知道它的工作原理,因为现在我不知道.
#include <memory>
#include <iostream>
struct A : public std::enable_shared_from_this<A>
{
~A()
{
auto this_ptr = shared_from_this(); // std::bad_weak_ptr exception here.
std::cout << "this: " << this_ptr;
}
};
int main()
{
auto a = std::make_shared<A>();
a.reset();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我打电话时遇到std::bad_weak_ptr异常shared_from_this().它是按设计的吗?是的,它可能是危险的,因为在析构函数返回后不能使用此指针,但我没有看到为什么在技术上不可能在此处获取指针的原因,因为共享指针对象显然仍然存在并且可以是用过的.有没有办法绕过这个,没有写我自己的enable_shared_from_this模拟(我宁愿做不到)?
我有一个可复制构造的结构向量,但不可赋值:
struct Struct
{
inline Struct(const std::string& text, int n) : _text(text), _n(n) {}
inline Struct(const Struct& other) : _text(other._text), _n(other._n) {}
const std::string _text;
const int _n;
Struct& operator=(const Struct&) = delete;
};
Run Code Online (Sandbox Code Playgroud)
一切都很好.事实上,我甚std::vector<Struct>至可以将值作为函数的返回值传递.然而,这失败了:
std::vector<TextFragment> v1, v2;
v2 = v1;
Run Code Online (Sandbox Code Playgroud)
当然,错误是:
错误:C2280:'Struct&Struct :: operator =(const Struct&)':尝试引用已删除的函数
我不明白为什么它试图调用它.这是否是某种优化以避免重新分配向量的内存块?
如何在Visual Studio 2005项目中创建一个表来获取每个c ++文件的编译时间.
在C++程序中包含前者而不是后者有哪些考虑因素?我总是包括math.h,stdlib.h从不cmath,cstdlib等等.我不明白后者甚至存在的原因,有人可以请赐教吗?
考虑我的测试代码:
#include <thread>
class Foo {
public:
void threadFunc() {}
void startThread() {
_th = std::thread(&Foo::threadFunc, *this);
}
private:
std::thread _th;
};
int main(int argc, char *argv[])
{
Foo f;
f.startThread();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是它产生的错误:
../untitled/main.cpp:13:14: warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char *argv[])
^
../untitled/main.cpp:13:26: warning: unused parameter 'argv' [-Wunused-parameter]
int main(int argc, char *argv[])
^
In file included from ../untitled/main.cpp:1:
In file included from /usr/bin/../lib/c++/v1/thread:90:
In file included from /usr/bin/../lib/c++/v1/__functional_base:15:
/usr/bin/../lib/c++/v1/type_traits:1372:12: error: call to implicitly-deleted copy …Run Code Online (Sandbox Code Playgroud) c++ ×7
c++11 ×4
c ×2
android ×1
calloc ×1
clang ×1
coding-style ×1
destructor ×1
header-files ×1
include ×1
macos ×1
malloc ×1
openssl ×1
shared-ptr ×1
sse ×1
stdthread ×1
stdvector ×1
type-traits ×1
unions ×1
vector ×1
weak-ptr ×1