Linux使用gcc编译使用zlib库的代码时,使用 -lz 来链接(link) zlib 库。

否则就会出现类似 undefined reference to `deflateInit_’ 的错误

当调用tcpdump时,出现错误:tcpdump: USB link-layer type filtering not implemented

原因

说明系统可能有多块网卡共存。

需要指定工作网卡才能开始截包,使用参数举例

[root@centos]# tcpdump -i eth0 udp port 53

在实际使用中例子中“eth0”“udp”“53”等参数,要根据实际需要来进行修改。 虽然一般单网卡默认名称应该是eth0,但也有其他情况。实际中要使用ifconfig查看自己需要使用的网卡。

错误原因

我手上一个项目本身采用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
  • 说明在将g++项目用gcc编译

在写代码的过程中,我发现使用VS2012编译出来的程序默认支持的系统版本略高

刚发现在 Win7+VS2012 编译出来的程序默认PE信息(Optional Header):

  • Major SubSystem Version = 6
  • Minor SubSystem Version = 0

导致的结果就是:在WinXP中运行便会提示 不是有效的Win32应用程序

当时还以为是自己搞错编译选项,将程序编译成x64的了。 结果后来使用PE工具才发现的这个问题。

解决方案

右击项目 -> 属性 -> 配置属性 -> 链接器 -> 系统 -> 所需最低版本 填入"5.01"

参考内容

http://msdn.microsoft.com/en-us/library/fcc1zstk(v=vs.110).aspx

SubsystemMinimumDefault
BOOT_APPLICATION1.01.0
CONSOLE5.01 (x86) 5.02 (x64) 6.02 (ARM)6.00 (x86, x64) 6.02 (ARM)
WINDOWS5.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)
POSIX1.019.90
EFI_APPLICATION, EFI_BOOT_SERVICE_DRIVER, EFI_ROM, EFI_RUNTIME_DRIVER1.01.0

Windows下编译安装

生成bjam

bootstrap.bat

编译

bjam --toolset=msvc-11.0 --build-type=complete

安装

bjam --prefix=D:\third_party\boost install

Ubuntu仅安装开发包

sudo apt-get install -y libboost-dev libboost-system-dev

以最小化安装的CentOS系统默认是不自动设置IP信息的。 我们想要正常访问网络,第一步就必须先把IP设置好。

设置IP为自动获取:

[root@centos ~]# dhclient eth0

设置IP为手动填写:

  1. 设置网关
[root@centos ~]# echo 'GATEWAY="192.168.1.1"' >> /etc/sysconfig/network
  1. 设置网卡信息
[root@centos ~]# echo 'DEVICE="eth0"
HWADDR="00:0C:29:28:F9:88"
NM_CONTROLLED="yes"
ONBOOT="yes"
BOOTPROTO="none"
BROADCAST="192.168.1.255"
IPADDR="192.168.1.120"
NETMASK="255.255.255.0"
NETWORK="192.168.1.0"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
TYPE="Ethernet"' > /etc/sysconfig/network-scripts/ifcfg-eth0
  1. 设置DNS
[root@centos ~]# echo 'nameserver 8.8.8.8
nameserver 8.8.4.4'> /etc/resolv.conf
  1. 重启网络
[root@centos ~]# service network restart
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]

mysqldb 如果在python程序执行时遇到这个错误提示“No module named MySQLdb

这个说明缺少对应的库,解决办法是:

mix os (easy_install)

easy_install mysql-python (mix os)

mix os (pip)

pip install mysql-python (mix os)

Ubuntu

apt-get install python-mysqldb (Linux Ubuntu, ...)

FreeBSD

cd /usr/ports/databases/py-MySQLdb && make install clean (FreeBSD)

Fedora, CentOS

yum install MySQL-python (Linux Fedora, CentOS ...)

对应后面括号内系统执行相应的命令就可以进行安装