V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
WildCat
V2EX  ›  问与答

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

  •  
  •   WildCat · 2014-08-24 12:11:49 +08:00 · 2267 次点击
    这是一个创建于 3746 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    先谢谢啦。

    第 1 条附言  ·  2014-08-24 14:59:43 +08:00
    我是这样想的,主要打算能用C写点iOS App逻辑,以增加反编译难度。另外就是希望以后能写点OpenWrt插件。
    14 条回复    2014-08-24 17:55:17 +08:00
    jamesxu
        1
    jamesxu  
       2014-08-24 12:27:03 +08:00   ❤️ 1
    交叉编译请先折腾 CLFS: http://trac.cross-lfs.org
    jamesxu
        2
    jamesxu  
       2014-08-24 12:28:22 +08:00   ❤️ 1
    另外你也可以看看 shadowsocks for android,这个其实也是交叉编译过来的,你可以学习下具体的编译过程是怎样的!
    ggarlic
        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
    WildCat
        4
    WildCat  
    OP
       2014-08-24 12:38:05 +08:00
    @jamesxu 对,我看到这个项目C语言的比重也很大。底层网络编程离不开C啊,shadowsocks-ios里面也是很多。
    jamesxu
        5
    jamesxu  
       2014-08-24 12:47:20 +08:00   ❤️ 1
    @WildCat 其实会编译和会写程序是有很大差距的,你这种只需要学会怎么交叉编译就行了,没必要跑去学 C 语言!当然,如果你日后想往 C/C++ 方面发展是可以去学的,但目前为止对你刷 ss 没什么帮助。

    如果就这两个软件的话到没必要装虚拟机,直接利用 homebrew 装必要软件就行了,如果还要研究其他的,个人觉得弄台 Linux 比较好。
    palxex
        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编译出来,但自己没弄过不能打包票。
    palxex
        7
    palxex  
       2014-08-24 13:03:35 +08:00   ❤️ 1
    刚才没看见LZ在求建议书……同意楼上意见。我的建议是直接去google autotools 入门。一口啃成胖子不现实,就LZ的帖子看,应该跟我一样是兴趣点很难保持的人,等看完那两本大厚书,兴趣点估计早就不知道跑哪里去了。
    gyteng
        8
    gyteng  
       2014-08-24 13:51:44 +08:00
    OS X下不分大小写,交叉编译的时候会有点小小的问题
    billlee
        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
    lsmgeb89
        10
    lsmgeb89  
       2014-08-24 14:27:39 +08:00   ❤️ 1
    交叉编译主要是折腾环境和工具吧,这个用不上编译原理的吧~~
    WildCat
        11
    WildCat  
    OP
       2014-08-24 14:59:18 +08:00 via iPhone
    @ggarlic
    @jamesxu
    @lsmgeb89

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

    @palxex
    谢谢,在卧床休息,一会我加电看看。
    Explorare
        12
    Explorare  
       2014-08-24 15:06:45 +08:00
    來人上動物書系列
    gotounix
        13
    gotounix  
       2014-08-24 15:09:09 +08:00
    zodiac1111
        14
    zodiac1111  
       2014-08-24 17:55:17 +08:00
    也尝试buildroot 在osx上编译,折腾死了,还有编译需要大小写敏感的文件系统.buildroot一上来就是新建一个文件系统.还有osx上的基本工具与gnu的不太一样,一上来就碰到过tar还是zcat等的行为不一致,我得brew一边,然后用g-的一系列程序代替.还要改buildroot的make文件.
    反正我现在是暂时放着,osx命令行还是用的不太习惯.目前还是debian.工作需要只能业余时间折腾.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2480 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:52 · PVG 23:52 · LAX 07:52 · JFK 10:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.