1、gawk编译ibgpg-error-1.33出错
1.1 报差错信息
gawk -f ./mkerrnos.awk ./errnos.in >code-to-errno.h
gawk -f ./mkerrcodes1.awk ./errnos.in >_mkerrcodes.h
gawk -f ./mkstrtable.awk -v textidx=2 -v nogettext=1 \
./err-sources.h.in >err-sources-sym.h
gawk -f ./mkstrtable.awk -v textidx=2 -v nogettext=1 \
./err-codes.h.in >err-codes-sym.h
gawk -f ./mkstrtable.awk -v textidx=2 -v nogettext=1 \
-v prefix=GPG_ERR_ -v namespace=errnos_ \
./errnos.in >errnos-sym.h
/usr/bin/gcc -g -O0 -I. -I. -o mkheader ./mkheader.c
gawk: ./mkerrnos.awk:86: warning: regexp escape sequence `\#' is not a known regexp operator
gawk: ./mkerrcodes1.awk:84: warning: regexp escape sequence `\#' is not a known regexp operator
gawk: fatal: cannot use gawk builtin `namespace' as variable name
gawk: ./mkstrtable.awk:113: warning: regexp escape sequence `\#' is not a known regexp operator
gawk: ./mkstrtable.awk:113: warning: regexp escape sequence `\#' is not a known regexp operator
make[4]: *** [Makefile:1615: errnos-sym.h] Error 2
make[4]: *** Waiting for unfinished jobs....
/home/jrf/Application/Udata/T5/T5/V1.0_2020513/longan/out/t507/demo2.0/longan/buildroot/host/bin/aarch64-linux-gnu-cpp -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -P _mkerrcodes.h | grep GPG_ERR_ | \
gawk -f ./mkerrcodes.awk >mkerrcodes.h
gawk: ./mkerrcodes.awk:88: warning: regexp escape sequence `\#' is not a known regexp operator
rm _mkerrcodes.h
make[3]: *** [Makefile:508: all-recursive] Error 1
make[2]: *** [Makefile:440: all] Error 2
make[1]: *** [package/pkg-generic.mk:241: /home/jrf/Application/Udata/T5/T5/V1.0_2020513/longan/out/t507/demo2.0/longan/buildroot/build/libgpg-error-1.33/.stamp_built] Error 2
make: *** [Makefile:96: _all] Error 2
make: Leaving directory '/home/jrf/Application/Udata/T5/T5/V1.0_2020513/longan/buildroot/buildroot-201902'
或者
strerror-sym.c:45:13: warning: implicit declaration of function 'errnos_msgidxof'; did you mean 'msgidxof'? [-Wimplicit-function-declaration]
idx = errnos_msgidxof (code);
^~~~~~~~~~~~~~~
msgidxof
strerror-sym.c:47:9: error: 'errnos_msgstr' undeclared (first use in this function)
return errnos_msgstr + errnos_msgidx[idx];
^~~~~~~~~~~~~
strerror-sym.c:47:9: note: each undeclared identifier is reported only once for each function it appears in
strerror-sym.c:47:25: error: 'errnos_msgidx' undeclared (first use in this function); did you mean 'errnos_msgstr'?
return errnos_msgstr + errnos_msgidx[idx];
^~~~~~~~~~~~~
errnos_msgstr
1.2 解决方案
找到libgpg-error-1.33编译包的位置,并分别找到这几个文件:
libgpg-error-1.33/lang/cl/mkerrcodes.awk
libgpg-error-1.33/src/mkerrcodes.awk
libgpg-error-1.33/src/mkerrcodes1.awk
libgpg-error-1.33/src/mkerrcodes2.awk
libgpg-error-1.33/src/mkerrnos.awk
libgpg-error-1.33/src/mkstrtable.awk
并分别打开找到如下代码:
!header {
sub (/\#.+/, "");
将上诉所有文件中的所有"sub (/#.+/, “”);",改为:“sub (/#.+/, “”);”,也就是说最新的gawk能够识别到’#'号不需要使用转义字符(‘\‘)的帮助
最后找到,如下几个文件:
libgpg-error-1.33/src/Makefile
libgpg-error-1.33/src/Makefile.am
libgpg-error-1.33/src/Makefile.in
libgpg-error-1.33/src/mkstrtable.awk
打开上述文件,搜索“namespace”,将所有搜索到的结果替换为“pkg_namespace”
然后必要clean,运行编译命令重新编译就ok了
参考网址:https://dev.gnupg.org/rE7865041c77f4f7005282f10f9b6666b19072fbdf#change-CargHgxjKH4W
2、找不到交叉编译工具
如果是直接拷贝别人已经编译过的T5的SDK进行编译,那么可能会出现编译成功后,Makefile交叉编译工具路径设置正确, 但是在make实例中的sdk_demo时,会出现找不到编译工具的问题。这时找到sdk_demo所在目录的makefile_cfg文件,打开它并将LICHEE_BR_OUT=“path”,改为自己的路径,就可以了。