前辈们,推荐一些编译原理和 C 语言 linux 编程的资料书籍可以吗?最近折腾 openwrt 发现交叉编译什么的折腾起来太困难

2014-08-24 12:11:49 +08:00
 WildCat

自己的现状: http://www.v2ex.com/t/116356
这两天想折腾个好的路由,本来想图省事又买了个极路由1S刷了潘多拉,发现ss和chinadns还是得自己编译。

看着 @clowwindy @madeye 大神写各种ss实现,都是咔咔的,望尘莫及啊。
目前的想法是学学编译基础,C语言编程,大家有什么好建议吗?
《UNIX网络编程》 *《UNIX环境高级编程》*值得啃吗?

另外,OS X下折腾交叉编译,是用虚拟机方便还是直接宿主?综合性能(发热)和效率(比如安装各种依赖)考虑。

先谢谢啦。

2197 次点击
所在节点    问与答
14 条回复
jamesxu
2014-08-24 12:27:03 +08:00
交叉编译请先折腾 CLFS: http://trac.cross-lfs.org
jamesxu
2014-08-24 12:28:22 +08:00
另外你也可以看看 shadowsocks for android,这个其实也是交叉编译过来的,你可以学习下具体的编译过程是怎样的!
ggarlic
2014-08-24 12:36:53 +08:00
《UNIX网络编程》 *《UNIX环境高级编程》这类书属于远水解不了近渴的
你说的编译原理应该是gcc/makefile用法一类的。gcc用法网上能搜到很多,makefile用法强烈推荐http://blog.csdn.net/haoel/article/details/2886

交叉编译我推荐在osx下直接搞,别上什么虚拟机(当然前提是你能配出满足要求的工具链)。交叉编译的原因除了编译其他架构的bin之外,还有一个就是目标机cpu很弱,编译过于费事。你这情况两种都满足

最后:clfs+2 单纯的lfs+1
WildCat
2014-08-24 12:38:05 +08:00
@jamesxu 对,我看到这个项目C语言的比重也很大。底层网络编程离不开C啊,shadowsocks-ios里面也是很多。
jamesxu
2014-08-24 12:47:20 +08:00
@WildCat 其实会编译和会写程序是有很大差距的,你这种只需要学会怎么交叉编译就行了,没必要跑去学 C 语言!当然,如果你日后想往 C/C++ 方面发展是可以去学的,但目前为止对你刷 ss 没什么帮助。

如果就这两个软件的话到没必要装虚拟机,直接利用 homebrew 装必要软件就行了,如果还要研究其他的,个人觉得弄台 Linux 比较好。
palxex
2014-08-24 12:51:24 +08:00
潘多拉固件。。。问一下LZ内核版本号?极1倒是不用自己编译,极1s不知是换了什么架构。
交叉编译的话,性能不用问是宿主。依赖,现在homebrew下其实也不是什么问题。比较麻烦的是OSX的默认文件系统HFS+对GNU工具链的bootstraping不友好,需要额外建一个JHFSX的dmg(内存大的话可以建一个5G的内存盘,性能管够!)来做交叉编译——工具链编译出来以后倒是可以放回文件系统没什么问题了。另外我只折腾过arm-unknown-linux-gnueabi的工具链,openwrt的从https://dev.openwrt.org/ticket/12441来看是可以直接用clang编译出来,但自己没弄过不能打包票。
palxex
2014-08-24 13:03:35 +08:00
刚才没看见LZ在求建议书……同意楼上意见。我的建议是直接去google autotools 入门。一口啃成胖子不现实,就LZ的帖子看,应该跟我一样是兴趣点很难保持的人,等看完那两本大厚书,兴趣点估计早就不知道跑哪里去了。
gyteng
2014-08-24 13:51:44 +08:00
OS X下不分大小写,交叉编译的时候会有点小小的问题
billlee
2014-08-24 14:07:33 +08:00
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
lsmgeb89
2014-08-24 14:27:39 +08:00
交叉编译主要是折腾环境和工具吧,这个用不上编译原理的吧~~
WildCat
2014-08-24 14:59:18 +08:00
@ggarlic
@jamesxu
@lsmgeb89

我是这样想的,主要打算能用C写点iOS App逻辑,以增加反编译难度。另外就是希望以后能写点OpenWrt插件。

@palxex
谢谢,在卧床休息,一会我加电看看。
Explorare
2014-08-24 15:06:45 +08:00
來人上動物書系列
gotounix
2014-08-24 15:09:09 +08:00
zodiac1111
2014-08-24 17:55:17 +08:00
也尝试buildroot 在osx上编译,折腾死了,还有编译需要大小写敏感的文件系统.buildroot一上来就是新建一个文件系统.还有osx上的基本工具与gnu的不太一样,一上来就碰到过tar还是zcat等的行为不一致,我得brew一边,然后用g-的一系列程序代替.还要改buildroot的make文件.
反正我现在是暂时放着,osx命令行还是用的不太习惯.目前还是debian.工作需要只能业余时间折腾.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129590

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX