一句话经验zlib
Linux使用gcc编译使用zlib库的代码时,使用 -lz 来链接(link) zlib 库。
否则就会出现类似 undefined reference to `deflateInit_’ 的错误
Linux使用gcc编译使用zlib库的代码时,使用 -lz 来链接(link) zlib 库。
否则就会出现类似 undefined reference to `deflateInit_’ 的错误
我手上一个项目本身采用gcc编译。后来因为代码功能需要移植到g++中时,出现了 “inet_addr” was not declared in this scope 这个错误。
// 添加该头文件
#include <arpa/inet.h>
error: string: No such file or directory
error: vector: No such file or directory
在写代码的过程中,我发现使用VS2012编译出来的程序默认支持的系统版本略高
刚发现在 Win7+VS2012 编译出来的程序默认PE信息(Optional Header):
导致的结果就是:在WinXP中运行便会提示 不是有效的Win32应用程序
当时还以为是自己搞错编译选项,将程序编译成x64的了。 结果后来使用PE工具才发现的这个问题。
右击项目 -> 属性 -> 配置属性 -> 链接器 -> 系统 -> 所需最低版本 填入"5.01"
http://msdn.microsoft.com/en-us/library/fcc1zstk(v=vs.110).aspx
Subsystem | Minimum | Default |
---|---|---|
BOOT_APPLICATION | 1.0 | 1.0 |
CONSOLE | 5.01 (x86) 5.02 (x64) 6.02 (ARM) | 6.00 (x86, x64) 6.02 (ARM) |
WINDOWS | 5.01 (x86) 5.02 (x64) 6.02 (ARM) | 6.00 (x86, x64) 6.02 (ARM) |
NATIVE (with DRIVER:WDM) | 1.00 (x86) 1.10 (x64, ARM) | 1.00 (x86) 1.10 (x64, ARM) |
NATIVE (without /DRIVER:WDM) | 4.00 (x86) 5.02 (x64) 6.02 (ARM) | 4.00 (x86) 5.02 (x64) 6.02 (ARM) |
POSIX | 1.0 | 19.90 |
EFI_APPLICATION, EFI_BOOT_SERVICE_DRIVER, EFI_ROM, EFI_RUNTIME_DRIVER | 1.0 | 1.0 |
bootstrap.bat
bjam --toolset=msvc-11.0 --build-type=complete
bjam --prefix=D:\third_party\boost install
sudo apt-get install -y libboost-dev libboost-system-dev
#include <vector>
#include <algorithms>
std::vector<int> random_numbers;
for (unsigned int i = 0; i < 100; ++i)
random_numbers.push_back(i + 1);
std::random_shuffle(random_numbers.begin(), random_numbers.end());
在生成项目之前勾选上 CMAKE_USE_RELATIVE_PATHS 这个选项,效果如上图所示。
在汇编语言中,我们可以直接使用ROL ROR等指令进行循环左移和循环右移的操作。 但C语言中却没有对应的操作,没办法只能自己实现了。
uint16_t ROL(int val, int n)
{
return (val << n) | (val >> (16 - n));
}
针对BYTE类型的循环左移:
uint8_t ROL(int val, int n)
{
return (val << n) | (val >> (8 - n));
}
针对DWORD类型的循环左移:
uint32_t ROL(int val, int n)
{
return (val << n) | (val >> (32 - n));
}
通过我写的一段Python代码可以让M8用户将联系人导入到Andriod系统中。
#!/usr/bin/env python
# coding: utf-8
# 功能:将M8导出的联系人XML转化成Andriod可以导入的vcf文件
# 版本:python 2.6 以上
# 作者:leaker
# 网站:http://www.leelib.com
from xml.etree import ElementTree as ET
# 输出到的mycontact.vcf
out = file("mycontact.vcf", "wb")
root = ET.parse(file("mycontact.xml", "r")).getroot()
print root
for e in root.findall('Person'):
out.write('BEGIN:VCARDrnVERSION:3.0rn')
out.write('N:%s;%s;;;rn' % (e.findtext('LastName', '').encode('utf8'), e.findtext('FirstName', '').encode('utf8')))
out.write('FN:%srn' % (e.findtext('FileAs', '').encode('utf8')))
# print 'FN:%srn'% (e.findtext('FileAs', '').encode('gb2312'))
for ee in root.findall('Phone'):
if ee.findtext('PersonID','') == e.findtext('ID',''):
primary = ee.get('IsPrimary') == 'true'
out.write('TEL;TYPE=CELL%s:%srn' % ((';TYPE=PREF' if primary else ''), ee.findtext('Info','')))
out.write('END:VCARDrn')
out.close()
点击这里下载:m8toAndriod.7z