Win32下静态连接使用libcurl

编译libcurl

详细编译信息参考curl-src\winbuild\BUILD.WINDOWS.txt

  • 打开Visual Studio command prompt Shell

    cd curl-src\winbuild

  • 编译debug版本

    nmake /f Makefile.vc mode=static VC=11 GEN_PEB=yes MACHINE=x86 DEBUG=YES

    编译生成到cd curl-src\builds\libcurl-vc11-x86-debug-static-ipv6-sspi-spnego-winssl目录下

  • 编译release版本

    nmake /f Makefile.vc mode=static VC=11 GEN_PEB=yes MACHINE=x86

    编译生成到cd curl-src\builds\libcurl-vc11-x86-release-static-ipv6-sspi-spnego-winssl目录下

使用

  • 项目预处理设置中设置CURL_STATIC宏,或包含curl头文件之前定义CURL_STATICLIB
  • 包含上一步编译生成目录下头文件
  • 链接上一步编译生成目录下lib文件

    1
    2
    Debug:`libcurl_a_debug.lib`
    Release:`libcurl_a.lib`

批量替换VS项目文件设置

一个 Windows 项目包含接近 30 个 VS 项目文件,需要从静态链接运行库修改为动态链接运行库。如果手动修改,每个项目需要修改 Release 和 Debug 下编译选项,需要修改 60 种配置。最终写了一个脚本遍历源码目录下项目文件,自动替换编译选项。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import os

def replace_md(proj):
print proj
projtmp = proj + '.tmp'

os.rename(proj, projtmp)

srcfile = open(projtmp, 'r')
newfile = open(proj, 'w')
for line in srcfile:
if 'RuntimeLibrary=' in line:
line = 'RuntimeLibrary="2"'
if 'release_static' in line:
line = line.replace('release_static', 'release')
if 'debug_static' in line:
line = line.replace('debug_static', 'debug')
if '_MT.lib' in line:
line = line.replace('_MT.lib', '_MD.lib')
if '_MTd.lib' in line:
line = line.replace('_MTd.lib', '_MDd.lib')
newfile.write(line)
srcfile.close()
newfile.close()

os.remove(projtmp)

def walk_srcdir(dir):
for dirpath,dirnames,filenames in os.walk('.'):
for file in filenames:
if '.vcproj' in file and 'pc.user' not in file:

replace_md(dir + os.path.join(dirpath[1:], file))

walk_srcdir(os.getcwd())

VS2008下编译使用GSL库

  • 下载gsl源码

Windows下使用gsl可以使用GnuWin32版本gsl,从以下地址下载gsl源码安装包

http://sourceforge.net/projects/gnuwin32/files/gsl/1.8/

  • 编译

使用VS打开gsl-1.8/VC8/libgsl.sln,分别选择Debug-DLLRelease-DLL选项
进行编译。默认不支持x64,需要手动创建x64下编译配置。

  • 使用

完成编译后,需要使用gsl-1.8需要以下目录下文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
gsl-1.8
├─gsl 头文件
└─VC8
├─libgsl
│ ├─Debug-DLL
│ ├─Release-DLL
│ └─x64
│ ├─Debug-DLL
│ └─Release-DLL
└─libgslcblas
├─Debug-DLL
├─Release-DLL
└─x64
├─Debug-DLL
└─Release-DLL

正确设置项目包含目录和库目录后即可使用。
程序运行时需要对应dll到执行目录或系统目录

1
2
3
4
5
6
//Debug
libgslcblas_d.dll
libgsl_d.dll
//Release
libgslcblas.dll
libgsl.dll

使用Git进行代码管理

简介

git 分布式版本控制系统
GitLab GitHub克隆
Gitflow 一套开发流程+git扩展包
SourceTreeGitExtensions git的GUI客户端

git的优缺点

本地版本库离线提交
分支和合并
分布式
速度

细粒度权限管理
某个项目下某个目录开放给指定用户权限
合理划分功能模块解决
使用习惯

gitflow

基于git的分支合并功能,常用开发动作分配到不同分支进行。

1
2
3
4
5
feature	重量级开发分支
develop 普通开发分支
release
hotfix 紧急修复
master 随时可用版本

http://nvie.com/img/2009/12/Screen-shot-2009-12-24-at-11.32.03.png

http://nvie.com/posts/a-successful-git-branching-model/

gitlab

web版git服务管理,方便的创建、管理项目,以及简单的项目管理。

SourceTreeGitExtensions

各有特点,搭配使用。

  • SourceTree
    gitflow集成
    界面使用方便

  • GitExtensions
    VS插件集成

Cloudera Manager方式在Hype-V中安装CDH4

安装 RHEL6.3

首先按照常规方式安装 RHEL6.3,注意需要设置 hostname 为 FQDN 格式(如 cdh0.localdomain)

由于Hyper-v默认无法识别网卡驱动,需要等安装CI后手动设置,参见下一步说明
                                                                                            #1

安装Hyper-V CI

  • 设置eth0

检查配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 是否存在,如不存在则创建静态配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
# 广播地址(非必须)
BROADCAST=255.255.255.255
IPADDR=192.168.1.103
NETMASK=255.255.255.0
# 网络地址(非必须)
NETWORK=192.168.1.0
# MAC地址
HWADDR=00:0C:29:01:98:27
# 网关地址
GATEWAY=192.168.1.1
ONBOOT=yes
  • 设置 DHCP
1
2
3
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
  • 检查hostname
1
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain
  • 激活eth0
1
2
ifconfig eth0 up
dhclient eth0
  • 设置开机激活eth0
1
2
echo "ifconfig eth0 up" >> /etc/rc.local
echo "dhclient eth0" >> /etc/rc.local
  • 重启网络服务进行测试
1
2
/etc/init.d/network restart
ifconfig
  • 重启系统,使hostname生效

  • 设置hosts

1
echo "$IP $hostname" >> /etc/hosts
  • 关闭selinux
1
vim /etc/selinux/conf

设置为selinux选项为disabled

  • 关闭iptables
1
2
chkconfig iptables off
service chkconfig stop
  • 设置RHEL6.3DVD镜像源
1
vim /etc/yum.repos.d/rhel-63-dvd.repo

设置内容:

[RHEL]
name=rhel6.3
baseurl=http://192.168.16.100/RHEL/RHEL63/
gpgcheck=1
gpgkey=http://192.168.16.100/RHEL/RHEL63/RPM-GPG-KEY-redhat-release.gpg
enabled=1
                                                                                            #3
  • 安装postgresql
1
2
3
4
# 安装缺失依赖包
yum install fuse-libs
easy_install argparse
yum install fuse-libs

参考 Cloudera 文档安装 CDH4

Installation Path A - Automated Installation by Cloudera Manager