豌豆

没有荚

libcurl 7.52.0 编译 OpenSSL 依赖。

1.使用如下目录结构

1
2
3
4
5
6
7
8
somedirectory\
|_curl-src
| |_winbuild
|
|_deps
|_ lib
|_ include
|_ bin

2.将 OpenSSL 的 lib,dll,头文件(带openssl文件夹) 分别拷贝到 deps 路径的 lib,bin,include 目录下

  1. 进入 winbuild 目录。
1
nmake /f Makefile.vc mode=dll  WITH_SSL=dll  ENABLE_WINSSL=no

编译正确。但是在链接阶段出现 openssl.obj 中的某些符号无法链接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
openssl.obj : error LNK2019: 无法解析的外部符号 _OpenSSL_version_num,该符号在函数 _Curl_ossl_version 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _EVP_PKEY_get0_RSA,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _EVP_PKEY_get0_DSA,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _EVP_PKEY_get0_DH,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _RSA_get0_key,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _RSA_get0_factors,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _RSA_get0_crt_params,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _DH_get0_pqg,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _DH_get0_key,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _DSA_get0_pqg,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _DSA_get0_key,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _X509_get_version,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _X509_get_X509_PUBKEY,该符号在函数 _pkp_pin_peer_pubkey 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _X509_get0_extensions,该符号在函数 _get_cert_chain 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _SSL_CTX_set_options,该符号在函数 _ossl_connect_step1 中被引用
openssl.obj : error LNK2019: 无法解析的外部符号 _TLS_client_method,该符号在函数 _ossl_connect_step1 中被引用

检查 libcurl\lib\vtls\openssl.c 文件,发现这些符号都与 **OPENSSL_VERSION_NUMBER **宏有关。这个宏在 openssl的头文件 opensslv.h 中定义。

在 libcurl\lib\vtls\openssl.h 中添加 opensslv.h 引用,重新编译,可解决此问题。

当我们在实现一个带有引用参数的函数时,可能会将该参数的地址存储在该函数作用域外的某个地方。如下代码所示:

MyObject* pObj = NULL;
MyObject tempObj;
void Fun(const MyObject& obj)
{
pObj = &obj;
}

tempObj.Release();

pObj.DoSomething();

当变量tempObj释放后,pObj仍保留了其地址。这将导致pObj变为空悬指针。

为了避免此类BUG出现,Mark Linton提出了如下法则:

函数中,禁止将引用参数的指针保存到函数作用域外。如果确有需要,需要将引用参数声明为指针参数

最近重新配置vsftpd后,登入ftp后出现

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

根据问题提示查看了vsftpd.conf配置。

为禁止用户访问其他目录,以保证系统安全,做了如下设置:

chroot_local_user=YES

chroot_list_enable=NO

关于此配置项的具体说明可以**戳这里**

检查配置未发现其他问题。考虑是用户根目录的问题,将此ftp用户的根目录移动到 xx/webroot中,并在vsftpd.conf中配置此目录。问题依旧。

后查看svftpd的更新说明 ,发现从2.3.5版本以后,为保证服务器安全,根目录必须不可写。更改目录权限,解决此问题

chmod a-w xx/webroot

service vsftpd restart

在Linux上使用goagent时可能会出现该问题。

出现该问题一般是由于root用户文件夹的权限不够,一些文件无法创建。

查看 root 下是否有.pki文件夹,若没有的话则创建之。并检查文件夹的权限。最好设置为777.

chmon 777 ~/.pki/

mkdir -p ~/.pki/nssdb
certutil -d ~/.pki/nssdb -N

1.下载并安装 ActivePerl

2.下载OpelSSL源码

3.在VS命令提示符下使用下列命令进行编译

perl configure VC-WIN32

ms\do_ms.bat

nmake -f ms\ntdll.mak

注意命令的大小写


以上是 1.0 版本的编译方法

从 2016 年 11 月 1.1 版本发布以后,编译方法不同了。不再使用 bat和mak, 而是使用 makefile

依旧是下载 ActivePerl 和 OpelSSL 源码。以及 nasm .并配置好 nasm 的环境变量

第三步使用vs命令提示

perl Configure VC-WIN32

nmake

nmake install

原文地址 :猛戳这里

首先将下面的源添加到 /etc/apt/source.list列表里

deb http://mirror.cse.iitk.ac.in/debian/ testing main contrib

然后执行以下命令更新源和安装python2.7

$ apt-get update

$ apt-get install python2.7

安装过程中会更新部分配置。并重启机器上的服务。

§前言

高精度计算是算法较为基础的一部分。

由于现有计算编程语言的数据类型限制,对于大数据的存储能力与计算能力有限。故在需要进行大数据运算时,我们采用非常规的方法代替编程语言内置的算法,来进行计算。

大数据计算的一般思路为:将大数据拆分成多个小数据,使用编辑语言能够计算的小数据进行计算,再将小数据合并成大数据。

§大数加法

从自然数的加法开始学习。

首先要解决的是数据的存储。由于C++语言的长整型存储位数有限,存储大数据会出现溢出错误,我们将大数当作一个字符串进行存储。

然后将字符串分解成可以运算的小数,按照数据运算的一般规则来进行计算处理。

最后将多个小数组合成大数表示。

则对于大数加法有如下步骤:

  • 存储。使用字符串存储大数,将大数从高位到低位依次存放于字符数组中。这符合数据表示习惯

  • 转换。将字符数组从低位到高位依次转换成整型数字,并按下标从大到小依次存入整型数组(即将大数据的最低位向右对齐)。这符合数据计算习惯。

  • 计算。按下标从大到小(即大数据从低位到高位),依次进行单个整型的加法运算。如果满10则向高一个进1

  • 转换并存储。按下标的从小到大,将整型数组元素依次存入字符数组。

Read more »
0%