自己的现状: http://www.v2ex.com/t/116356
这两天想折腾个好的路由,本来想图省事又买了个极路由1S刷了潘多拉,发现ss和chinadns还是得自己编译。
看着 @clowwindy @madeye 大神写各种ss实现,都是咔咔的,望尘莫及啊。
目前的想法是学学编译基础,C语言编程,大家有什么好建议吗?
《UNIX网络编程》 *《UNIX环境高级编程》*值得啃吗?
另外,OS X下折腾交叉编译,是用虚拟机方便还是直接宿主?综合性能(发热)和效率(比如安装各种依赖)考虑。
先谢谢啦。
1
jamesxu 2014-08-24 12:27:03 +08:00 1
交叉编译请先折腾 CLFS: http://trac.cross-lfs.org
|
2
jamesxu 2014-08-24 12:28:22 +08:00 1
另外你也可以看看 shadowsocks for android,这个其实也是交叉编译过来的,你可以学习下具体的编译过程是怎样的!
|
3
ggarlic 2014-08-24 12:36:53 +08:00 1
《UNIX网络编程》 *《UNIX环境高级编程》这类书属于远水解不了近渴的
你说的编译原理应该是gcc/makefile用法一类的。gcc用法网上能搜到很多,makefile用法强烈推荐http://blog.csdn.net/haoel/article/details/2886 交叉编译我推荐在osx下直接搞,别上什么虚拟机(当然前提是你能配出满足要求的工具链)。交叉编译的原因除了编译其他架构的bin之外,还有一个就是目标机cpu很弱,编译过于费事。你这情况两种都满足 最后:clfs+2 单纯的lfs+1 |
4
WildCat OP @jamesxu 对,我看到这个项目C语言的比重也很大。底层网络编程离不开C啊,shadowsocks-ios里面也是很多。
|
5
jamesxu 2014-08-24 12:47:20 +08:00 1
@WildCat 其实会编译和会写程序是有很大差距的,你这种只需要学会怎么交叉编译就行了,没必要跑去学 C 语言!当然,如果你日后想往 C/C++ 方面发展是可以去学的,但目前为止对你刷 ss 没什么帮助。
如果就这两个软件的话到没必要装虚拟机,直接利用 homebrew 装必要软件就行了,如果还要研究其他的,个人觉得弄台 Linux 比较好。 |
6
palxex 2014-08-24 12:51:24 +08:00 1
潘多拉固件。。。问一下LZ内核版本号?极1倒是不用自己编译,极1s不知是换了什么架构。
交叉编译的话,性能不用问是宿主。依赖,现在homebrew下其实也不是什么问题。比较麻烦的是OSX的默认文件系统HFS+对GNU工具链的bootstraping不友好,需要额外建一个JHFSX的dmg(内存大的话可以建一个5G的内存盘,性能管够!)来做交叉编译——工具链编译出来以后倒是可以放回文件系统没什么问题了。另外我只折腾过arm-unknown-linux-gnueabi的工具链,openwrt的从https://dev.openwrt.org/ticket/12441来看是可以直接用clang编译出来,但自己没弄过不能打包票。 |
7
palxex 2014-08-24 13:03:35 +08:00 1
刚才没看见LZ在求建议书……同意楼上意见。我的建议是直接去google autotools 入门。一口啃成胖子不现实,就LZ的帖子看,应该跟我一样是兴趣点很难保持的人,等看完那两本大厚书,兴趣点估计早就不知道跑哪里去了。
|
8
gyteng 2014-08-24 13:51:44 +08:00
OS X下不分大小写,交叉编译的时候会有点小小的问题
|
9
billlee 2014-08-24 14:07:33 +08:00 1
Mac OS X 编译 OpenWRT 确实有点折腾,OpenWRT 编译 require case-sensitive filesystem.
OpenWRT 编译还是比较简单的,它把整套工具链都准备好了,host 上只需要安装本机编译环境,然后它会自己把交叉工具链编译出来。如果你用二进制的 SDK, 那就连编译工具链的步骤都省了。 然后 shadowsocks-libev 是写好了 OpenWRT package 的,不需要自己写 autotools 和 package Makefile. 你只要把 openwrt/ 复制到 SDK 目录下的 packages/shadowsocks-libev, 然后去 OpenWRT 的 svn export 出依赖项,也放到 packages/ 下,就可以编译了。细节参见 http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk#usage. 如果你要编译整个固件,就把 openwrt/ 复制到 OpenWRT 源代码目录的 packages/shadowsocks-libev, 然后在 make menuconfig 里就可以找到 shadowsocks-libev. 参考资料: http://wiki.openwrt.org/doc/howto/buildroot.exigence http://wiki.openwrt.org/doc/howto/build |
10
lsmgeb89 2014-08-24 14:27:39 +08:00 1
交叉编译主要是折腾环境和工具吧,这个用不上编译原理的吧~~
|
11
WildCat OP |
12
Explorare 2014-08-24 15:06:45 +08:00
來人上動物書系列
|
13
gotounix 2014-08-24 15:09:09 +08:00
|
14
zodiac1111 2014-08-24 17:55:17 +08:00
也尝试buildroot 在osx上编译,折腾死了,还有编译需要大小写敏感的文件系统.buildroot一上来就是新建一个文件系统.还有osx上的基本工具与gnu的不太一样,一上来就碰到过tar还是zcat等的行为不一致,我得brew一边,然后用g-的一系列程序代替.还要改buildroot的make文件.
反正我现在是暂时放着,osx命令行还是用的不太习惯.目前还是debian.工作需要只能业余时间折腾. |