Ubuntu 16.04下编译shadowsocks-libev

shadowsocks-libev是python原版shadowsocks的libev移植。

效率上来看,libev版本的内存占用率低,效率要高一些。

参看github仓库:shadowsocks-libev

Ubuntu 16.04本身是LTS版本,从长期运行角度上来说,是个不错的发行版。在其上部署shadowsocks-libev 可能会有些波折,这里记录一下。

shadowsocks-libev的编译方法,在仓库里面的文档有相关表述。照做即可。

不过,其编译时的configure的prefix设置的是/usr , 这个在Ubuntu16.04下会产生问题:

1
2
3
4
5
6
7
ss_local-crypto.o: In function `crypto_derive_key':
/root/shadowsocks-libev/src/crypto.c:112: undefined reference to `crypto_pwhash'
ss_local-aead.o: In function `cipher_aead_decrypt':
/root/shadowsocks-libev/src/aead.c:274: undefined reference to `crypto_aead_xchacha20poly1305_ietf_decrypt'
ss_local-aead.o: In function `cipher_aead_encrypt':
/root/shadowsocks-libev/src/aead.c:227: undefined reference to `crypto_aead_xchacha20poly1305_ietf_encrypt'
collect2: error: ld returned 1 exit status

主要原因,就是ubuntu16.04自带了libsodium

解决方案,就是在编译shadowsocks-libev的时候,指定刚编译出来的最新版本libsodium路径(usr目录)即可。

原版的编译指令节选:

1
2
3
4
.....
# Start building
./autogen.sh && ./configure && make
sudo make install

改为:

1
2
./autogen.sh && ./configure --with-sodium-include=/usr/include --with-sodium-lib=/usr/lib --with-mbedtls-include=/usr/include --with-mbedtls-lib=/usr/lib && make
sudo make install

即可。