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

debian RT-AC68U 交叉编译链 编译 ChinaDNS 失败

  •  
  •   xzm1006 · 2015-02-28 22:43:22 +08:00 · 6198 次点击
    这是一个创建于 3555 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我git clone完后使用./autogen.sh && CC=arm-uclibc-linux-2.6.36-gcc CXX=arm-uclibc-linux-2.6.36-g++ AR=arm-uclibc-linux-2.6.36-ar RANLIB=arm-uclibc-linux-2.6.36-ranlib ./configure --host=arm-uclibc-linux --enable-static && make进行编译

    结果报错如下:

    arm-uclibc-linux-2.6.36-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT chinadns.o -MD -MP -MF .deps/chinadns.Tpo -c -o chinadns.o chinadns.c
    mv -f .deps/chinadns.Tpo .deps/chinadns.Po
    arm-uclibc-linux-2.6.36-gcc -g -O2 -static -o chinadns chinadns.o -lresolv
    chinadns.o: In function `hostname_from_question':
    /root/ChinaDNS/src/chinadns.c:727: undefined reference to `__ns_parserr'
    chinadns.o: In function `should_filter_query':
    /root/ChinaDNS/src/chinadns.c:767: undefined reference to `__ns_parserr'
    chinadns.o: In function `dns_handle_remote':
    /root/ChinaDNS/src/chinadns.c:655: undefined reference to `__ns_initparse'
    chinadns.o: In function `dns_handle_local':
    /root/ChinaDNS/src/chinadns.c:567: undefined reference to `__ns_initparse'

    请问应该如何解决?本来想@ /t/124550 76L的szpunk,但是他似乎很久没上了
    30 条回复    2015-10-02 21:07:23 +08:00
    XiaoxiaoPu
        1
    XiaoxiaoPu  
       2015-02-28 23:09:24 +08:00   ❤️ 1
    正确的交叉编译配置应该是 ./configure --host=arm-uclibc-linux-2.6.36 --enable-static,
    不要再指定 CC=... 之类的。错误原因似乎是没有找到 libresolv,你应该把 configure 的 log 贴出来。

    给个临时解决方案(不一定可行):
    cd src
    arm-uclibc-linux-2.6.36-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT chinadns.o -MD -MP -MF .deps/chinadns.Tpo -c -o chinadns.o chinadns.c -lresolv
    xzm1006
        2
    xzm1006  
    OP
       2015-02-28 23:42:48 +08:00
    @XiaoxiaoPu 谢谢你给出临时解决方案,我运行后不报错了,但是我不知道下一步应该做什么,请原谅我编译小白
    因为我按照教程用该交叉编译配置成功编译了ss,并且放入路由器可运行,你的交叉编译配置之前已试过,成功生成了文件,但出现报错如下:
    chinadns.o: In function `resolve_dns_servers':
    /root/ChinaDNS/src/chinadns.c:326: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

    放入路由器运行出现报错如下:
    RT-AC68U-D9F8:/jffs# ./chinadns -m -c chnroute.txt
    ./chinadns: line 6: syntax error: unexpected word (expecting ")")
    RT-AC68U-D9F8:/jffs# ./chinadns: line 1:ELF : not found
    LazyZhu
        3
    LazyZhu  
       2015-03-01 00:50:01 +08:00   ❤️ 1
    XiaoxiaoPu
        4
    XiaoxiaoPu  
       2015-03-01 01:18:48 +08:00   ❤️ 1
    有问题的原因主要就是 chinadns 用到了 libresolv,可能你的交叉工具链里没有 libresolv 的静态版本,你试试把 --enable-static 去掉。或者试试这个内嵌了 libresolv 的版本: https://github.com/XiaoxiaoPu/ChinaDNS
    yushiro
        5
    yushiro  
       2015-03-01 14:29:12 +08:00 via iPhone
    lz,你是按照哪篇教程交叉编译SS的?我也是Ac68U,正需要~
    xzm1006
        6
    xzm1006  
    OP
       2015-03-01 17:06:26 +08:00
    @LazyZhu 感谢~试了能运行~话说18KB这么小……我以为路由器只能静态编译运行
    xzm1006
        7
    xzm1006  
    OP
       2015-03-01 17:09:26 +08:00
    @XiaoxiaoPu 试了编译你修改的版本,编译出来了!的确是缺少了libresolv,万分感谢!
    xzm1006
        8
    xzm1006  
    OP
       2015-03-01 17:11:05 +08:00
    @yushiro 教程可以参考/t/165064
    xzm1006
        9
    xzm1006  
    OP
       2015-03-02 11:09:12 +08:00
    @LazyZhu 能请教你是用什么交叉工具链编译的吗?发现我之前编译的ss-tunnel,放在路由器运行出现Segmentation fault错误……抓狂了
    kdrx
        10
    kdrx  
       2015-04-12 02:43:54 +08:00
    kdrx
        11
    kdrx  
       2015-04-12 02:45:30 +08:00
    @XiaoxiaoPu
    请问,你的内嵌libresolv的版本的chinadns能再次分享吗?
    @LazyZhu
    请问您是如果动态编译这个18k的chinadns的呢?能分享下吗?
    XiaoxiaoPu
        12
    XiaoxiaoPu  
       2015-04-13 10:17:07 +08:00
    @kdrx 动态链接能运行就没必要静态链接了
    kdrx
        13
    kdrx  
       2015-04-13 13:23:57 +08:00
    @XiaoxiaoPu
    我不是需要静态链接啊,静态连接后能运行的,但是体积太大。
    我是需要你这种内嵌libresolv的版本的动态链接编译。
    我官方源码用 arm-linux-gcc 交叉编译动态链接后,目标机器ac68u提示缺少libresolv.so
    而lazyzhu的动态链接版本能在asus 68u 正确运行,而我用ldd观察,发现他根本就没有链接libresolv.so库,可能也是源码中嵌入了libresolv中的相应函数。
    XiaoxiaoPu
        14
    XiaoxiaoPu  
       2015-04-13 14:03:50 +08:00
    @kdrx 代码不在工作的电脑里,晚上给你
    kdrx
        15
    kdrx  
       2015-04-13 23:38:34 +08:00
    @XiaoxiaoPu 好的,谢谢你!发我邮箱吧: [email protected]
    qq674949301
        16
    qq674949301  
       2015-09-05 13:06:05 +08:00
    @kdrx @LazyZhu @XiaoxiaoPu 您好!我交叉编译也遇到一些错误!是编译 tomato mips 平台的
    参考: https://github.com/shadowsocks/ChinaDNS

    交叉编译 ChinaDNS 出现以下错误:

    make[1]: 正在进入目录 `/home/houzi/ChinaDNS'
    Making all in src
    make[2]: 正在进入目录 `/home/houzi/ChinaDNS/src'
    mipsel-linux-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT local_ns_parser.o -MD -MP -MF .deps/local_ns_parser.Tpo -c -o local_ns_parser.o local_ns_parser.c
    local_ns_parser.c: In function `local_ns_parserr':
    local_ns_parser.c:92: structure has no member named `_msg_ptr'
    local_ns_parser.c:97: structure has no member named `_msg_ptr'
    local_ns_parser.c:103: structure has no member named `_msg_ptr'
    local_ns_parser.c:106: structure has no member named `_msg_ptr'
    local_ns_parser.c:107: structure has no member named `_msg_ptr'
    local_ns_parser.c:111: structure has no member named `_msg_ptr'
    local_ns_parser.c:111: structure has no member named `_msg_ptr'
    local_ns_parser.c:112: structure has no member named `_msg_ptr'
    local_ns_parser.c:112: structure has no member named `_msg_ptr'
    local_ns_parser.c:118: structure has no member named `_msg_ptr'
    local_ns_parser.c:122: structure has no member named `_msg_ptr'
    local_ns_parser.c:122: structure has no member named `_msg_ptr'
    local_ns_parser.c:123: structure has no member named `_msg_ptr'
    local_ns_parser.c:123: structure has no member named `_msg_ptr'
    local_ns_parser.c:124: structure has no member named `_msg_ptr'
    local_ns_parser.c:128: structure has no member named `_msg_ptr'
    local_ns_parser.c:129: structure has no member named `_msg_ptr'
    local_ns_parser.c: In function `local_ns_setsection':
    local_ns_parser.c:141: structure has no member named `_msg_ptr'
    local_ns_parser.c:144: structure has no member named `_msg_ptr'
    make[2]: *** [local_ns_parser.o] 错误 1
    make[2]:正在离开目录 `/home/houzi/ChinaDNS/src'
    make[1]: *** [all-recursive] 错误 1
    make[1]:正在离开目录 `/home/houzi/ChinaDNS'
    make: *** [all] 错误 2
    qq674949301
        18
    qq674949301  
       2015-09-05 13:13:58 +08:00
    @LazyZhu 好的! brcm 53xx 的不是 ARM 平台的?
    qq674949301
        19
    qq674949301  
       2015-09-05 13:15:59 +08:00
    @LazyZhu 我的是 BRCM 4706,应该属于 BCM 47XX 的吧?
    qq674949301
        20
    qq674949301  
       2015-09-05 13:28:56 +08:00
    @还有 OpenWrt SDK 编译的放在 tomato 能运行吗?
    qq674949301
        21
    qq674949301  
       2015-09-30 18:28:15 +08:00
    @kdrx 请问您静态编译是参照哪个 wiki 的,能否给一下编译参数!我编译的成功但是运行报错!
    kdrx
        22
    kdrx  
       2015-10-01 02:39:56 +08:00
    我的目标机器是 asus ac68u, 如果不装 entware-arm ,默认没有 libresolv 动态库,按照 XiaoxiaoPu 修改的代码内嵌 libresolv 静态编译后,没有 libresolv 也一样运行,大小只有 22k 左右。
    tomato 我不太清楚是不是也因为没有这个库导致不能运行。
    kdrx
        23
    kdrx  
       2015-10-01 02:57:39 +08:00
    kdrx
        24
    kdrx  
       2015-10-01 02:59:00 +08:00
    @qq674949301
    编译好的不依赖 libresolv.so 的 chinadns , arm 平台可用。
    链接: http://pan.baidu.com/s/1c0jVVd2 密码: 92yh
    qq674949301
        25
    qq674949301  
       2015-10-01 11:14:19 +08:00
    @kdrx 谢谢啊!我可以用 OP 的 SDK 就可以动态编译 1.3.2 ,您之前编译那个静态版本的参数能否提供一下,我按照 chinadns 提供的静态编译 ARM 下不能成功运行,提示 chinadns: line 1: syntax error: unexpected word (expecting ")") ,然而 mips 按照次编译完全没有问题!所以您能否提供一下你之前静态编译的编译参数!
    qq674949301
        26
    qq674949301  
       2015-10-01 15:35:06 +08:00
    @kdrx 还有 1.3.2 有时候会出现不能解析一些需要 FQ 的 IP 的情况!
    kdrx
        27
    kdrx  
       2015-10-02 01:17:54 +08:00
    @qq674949301
    sorry ,时间太久了,我搞错了,我也是动态编译的,只是把 libresolv 相关代码内嵌,去除对这个动态库的依赖。编译方法完全等同于 github 主页上的方法。
    kdrx
        28
    kdrx  
       2015-10-02 01:19:51 +08:00
    @kdrx
    另外你如果要静态编译,我试过小米的交叉编译工具可以静态编译通过,按照主页对于 tomato 平台静态编译的参数编译即可。
    qq674949301
        29
    qq674949301  
       2015-10-02 12:43:27 +08:00
    @kdrx 非常感谢,我先去试试!
    qq674949301
        30
    qq674949301  
       2015-10-02 21:07:23 +08:00
    @kdrx 非常感谢!编译出来可以正常运行,不知道你能否提供一份内嵌 libresolv 动态库 chinadns 1.3.1 源码给我! [email protected]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:36 · PVG 22:36 · LAX 06:36 · JFK 09:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.