超简洁的群晖交叉编译教程

超简洁的群晖交叉编译教程

最近把一个群晖的NAS放在校园网里的时候遇到了锐捷认证的问题,找了一下没有现成的程序可以拿来用,然后自己交叉编译一个mentohust来用。

1.环境

Ubuntu20.04,先去下载目标机器对应的toolchain(就是用来编译目标平台的程序的编译工具套装,gcc、g++、ld和库啥的)。
在群晖的开发工具下载首页,进入DMS相应版本的目录里,比如我的是6.2.3版本,进去DSM 6.2 Tool Chains,然后可以看到有很多对应着不同处理器的压缩包,找和你CPU对应的版本。这个对应关系我没弄全,自己查一下资料,比如,我的是intel的CPU,肯定是intel x86,然后后面是Linux版本,这个要ssh到群晖上看一下:

# uname -a
Linux my-nas 3.10.105 #25426 SMP Wed Jul 8 03:19:42 CST 2020 x86_64 GNU/Linux synology_broadwell_rs3618xs

我这个是3.10.105的,没有这个对应的,所以下了3.10.102的。
复制下载地址,在Ubuntu上:

# wget https://master.dl.sourceforge.net/project/dsgpl/DSM%206.2%20Tool%20Chains/Intel%20x86%20Linux%203.10.102%20%28Broadwell%29/broadwell-gcc493_glibc220_linaro_x86_64-GPL.txz
# tar -Jvxf broadwell-gcc493_glibc220_linaro_x86_64-GPL.txz
# cd x86_64-pc-linux-gnu/bin
# ls
x86_64-pc-linux-gnu-addr2line  x86_64-pc-linux-gnu-cc            x86_64-pc-linux-gnu-elfedit    x86_64-pc-linux-gnu-gcc-ar      x86_64-pc-linux-gnu-gprof   x86_64-pc-linux-gnu-nm        x86_64-pc-linux-gnu-ranlib   x86_64-pc-linux-gnu-strip
x86_64-pc-linux-gnu-ar         x86_64-pc-linux-gnu-c++filt       x86_64-pc-linux-gnu-g++        x86_64-pc-linux-gnu-gcc-nm      x86_64-pc-linux-gnu-ld      x86_64-pc-linux-gnu-objcopy   x86_64-pc-linux-gnu-readelf
x86_64-pc-linux-gnu-as         x86_64-pc-linux-gnu-cpp           x86_64-pc-linux-gnu-gcc        x86_64-pc-linux-gnu-gcc-ranlib  x86_64-pc-linux-gnu-ld.bfd  x86_64-pc-linux-gnu-objdump   x86_64-pc-linux-gnu-size
x86_64-pc-linux-gnu-c++        x86_64-pc-linux-gnu-ct-ng.config  x86_64-pc-linux-gnu-gcc-4.9.3  x86_64-pc-linux-gnu-gcov        x86_64-pc-linux-gnu-ldd     x86_64-pc-linux-gnu-populate  x86_64-pc-linux-gnu-strings
可以看到gcc相关的可执行程序,这时候可以验证一下下的程序对不对,运行一个试试。
然后把bin目录添加到PATH让系统能够找到你的工具链
# export PATH=$PATH:你的工具包的目录/x86_64-pc-linux-gnu/bin

这样基本环境就弄好了,剩下的就是编译你需要的程序。

先去下载别人的源码,然后生成Makefile,别人源码可能会采用采用autogen.sh、bootstrap或者configure,这种项目的根目录里会有一个autogen.sh、bootstrap或者configure文件。如果存在前两者的话,它们就是用来辅助生成configure的,然后再由configure来生成Makefile。有些项目同时带有autogen/bootstrap以及configure,这种一般是预先已经生成了configure文件的,可以先拿它的configure执行下面的步骤,不行的话再执行autogen/bootstrap来重新生成configure。
这时候可能需要安装automake等工具。

# apt-get install autoconf automake libtool

带参数执行configure生成Makefile

./configure --host=x86_64-pc-linux-gnu [这里可能还有你的程序的其他配置参数]

其中host就是目标机器平台了,这个对应着工具链bin目录下文件共有的前缀,比如前面ls命令输出的那些gcc之类的,x86_64-pc-linux-gnu是它们的前缀。
configure不出错的话下一步就是执行make进行编译,编译的输出自己去找一下。有些也可以在configure里设置安装目录,然后make完再make install就会安装到设置的目录了。
编译中出现的其他问题,请在google\stackoverflow\github的issues里面找解决办法。
完工

你可能感兴趣的:(修东西)