最近编译 gcc-linaro-4.8-2014.04-final 时报了如下错误:
cfns.gperf: In function 'const char* libc_name_p(const char*, unsigned int)':
cfns.gperf:101:1: error: 'const char* libc_name_p(const char*, unsigned int)' redeclared inline with 'gnu_inline' attribute
cfns.gperf:26:14: note: 'const char* libc_name_p(const char*, unsigned int)' previously declared here
cfns.gperf: At global scope:
cfns.gperf:26:14: warning: inline function 'const char* libc_name_p(const char*, unsigned int)' used but never defined
Makefile:1058: recipe for target 'cp/except.o' failed
困扰许久,之后发现使用的编译用的cc是x86_64-linux-gnu-g++,
查看x86_64-linux-gnu-g++ 位置
# which x86_64-linux-gnu-g++
/usr/bin/x86_64-linux-gnu-g++
# ls -l /usr/bin/x86_64-linux-gnu-g++
lrwxrwxrwx 1 root root 7 Mar 28 09:58 /usr/bin/x86_64-linux-gnu-g++ -> g++-6
发现x86_64-linux-gnu-g++ 链接到了 g++ -6,这里应该要用g++ -4.8的,因为我的debian9 默认装的gcc-6,后来我又装了gcc-4.8 。但这里的x86_64-linux-gnu-g++ 链接忘记改了。
类似的 x86_64-linux-gnu-gcc,x86_64-linux-gnu-gcc-ar 这些也存在同样的问题,
解决办法:修改x86_64-linux-gnu-g++ ,x86_64-linux-gnu-gcc-ar …的链接指向4.8版本
这是我修改后的:
# ls -l /usr/bin/x86_64*
lrwxrwxrwx 1 root root 7 Mar 8 2018 /usr/bin/x86_64 -> setarch
-rwxr-xr-x 1 root root 27640 May 10 2017 /usr/bin/x86_64-linux-gnu-addr2line
-rwxr-xr-x 1 root root 60384 May 10 2017 /usr/bin/x86_64-linux-gnu-ar
-rwxr-xr-x 1 root root 861008 May 10 2017 /usr/bin/x86_64-linux-gnu-as
-rwxr-xr-x 1 root root 27224 May 10 2017 /usr/bin/x86_64-linux-gnu-c++filt
lrwxrwxrwx 1 root root 7 Mar 28 09:59 /usr/bin/x86_64-linux-gnu-cpp -> cpp-4.8
lrwxrwxrwx 1 root root 7 Dec 20 2014 /usr/bin/x86_64-linux-gnu-cpp-4.8 -> cpp-4.8
-rwxr-xr-x 1 root root 953112 Feb 15 2018 /usr/bin/x86_64-linux-gnu-cpp-6
-rwxr-xr-x 1 root root 2884312 May 10 2017 /usr/bin/x86_64-linux-gnu-dwp
-rwxr-xr-x 1 root root 31504 May 10 2017 /usr/bin/x86_64-linux-gnu-elfedit
lrwxrwxrwx 1 root root 7 Mar 28 09:58 /usr/bin/x86_64-linux-gnu-g++ -> g++-4.8
lrwxrwxrwx 1 root root 7 Dec 20 2014 /usr/bin/x86_64-linux-gnu-g++-4.8 -> g++-4.8
-rwxr-xr-x 1 root root 953112 Feb 15 2018 /usr/bin/x86_64-linux-gnu-g++-6
lrwxrwxrwx 1 root root 7 Mar 28 10:00 /usr/bin/x86_64-linux-gnu-gcc -> gcc-4.8
lrwxrwxrwx 1 root root 7 Dec 20 2014 /usr/bin/x86_64-linux-gnu-gcc-4.8 -> gcc-4.8
-rwxr-xr-x 1 root root 949016 Feb 15 2018 /usr/bin/x86_64-linux-gnu-gcc-6
lrwxrwxrwx 1 root root 10 Mar 28 10:00 /usr/bin/x86_64-linux-gnu-gcc-ar -> gcc-ar-4.8
lrwxrwxrwx 1 root root 10 Dec 20 2014 /usr/bin/x86_64-linux-gnu-gcc-ar-4.8 -> gcc-ar-4.8
-rwxr-xr-x 1 root root 27168 Feb 15 2018 /usr/bin/x86_64-linux-gnu-gcc-ar-6
lrwxrwxrwx 1 root root 10 Mar 28 10:00 /usr/bin/x86_64-linux-gnu-gcc-nm -> gcc-nm-4.8
lrwxrwxrwx 1 root root 10 Dec 20 2014 /usr/bin/x86_64-linux-gnu-gcc-nm-4.8 -> gcc-nm-4.8
-rwxr-xr-x 1 root root 27168 Feb 15 2018 /usr/bin/x86_64-linux-gnu-gcc-nm-6
lrwxrwxrwx 1 root root 14 Mar 28 10:01 /usr/bin/x86_64-linux-gnu-gcc-ranlib -> gcc-ranlib-4.8
lrwxrwxrwx 1 root root 14 Dec 20 2014 /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.8 -> gcc-ranlib-4.8
-rwxr-xr-x 1 root root 27168 Feb 15 2018 /usr/bin/x86_64-linux-gnu-gcc-ranlib-6
lrwxrwxrwx 1 root root 8 Mar 28 10:02 /usr/bin/x86_64-linux-gnu-gcov -> gcov-4.8
lrwxrwxrwx 1 root root 8 Dec 20 2014 /usr/bin/x86_64-linux-gnu-gcov-4.8 -> gcov-4.8
-rwxr-xr-x 1 root root 520120 Feb 15 2018 /usr/bin/x86_64-linux-gnu-gcov-6
lrwxrwxrwx 1 root root 11 Mar 28 10:03 /usr/bin/x86_64-linux-gnu-gcov-dump -> gcov-dump-6
-rwxr-xr-x 1 root root 450416 Feb 15 2018 /usr/bin/x86_64-linux-gnu-gcov-dump-6
lrwxrwxrwx 1 root root 11 Apr 9 2017 /usr/bin/x86_64-linux-gnu-gcov-tool -> gcov-tool-6
-rwxr-xr-x 1 root root 475056 Feb 15 2018 /usr/bin/x86_64-linux-gnu-gcov-tool-6
-rwxr-xr-x 1 root root 98600 May 10 2017 /usr/bin/x86_64-linux-gnu-gprof
lrwxrwxrwx 1 root root 6 May 10 2017 /usr/bin/x86_64-linux-gnu-ld -> ld.bfd
-rwxr-xr-x 1 root root 1264968 May 10 2017 /usr/bin/x86_64-linux-gnu-ld.bfd
-rwxr-xr-x 1 root root 3109336 May 10 2017 /usr/bin/x86_64-linux-gnu-ld.gold
-rwxr-xr-x 1 root root 44888 May 10 2017 /usr/bin/x86_64-linux-gnu-nm
-rwxr-xr-x 1 root root 228552 May 10 2017 /usr/bin/x86_64-linux-gnu-objcopy
-rwxr-xr-x 1 root root 369024 May 10 2017 /usr/bin/x86_64-linux-gnu-objdump
lrwxrwxrwx 1 root root 34 Mar 14 11:01 /usr/bin/x86_64-linux-gnu-pkg-config -> /usr/share/pkg-config-crosswrapper
-rwxr-xr-x 1 root root 60416 May 10 2017 /usr/bin/x86_64-linux-gnu-ranlib
-rwxr-xr-x 1 root root 530344 May 10 2017 /usr/bin/x86_64-linux-gnu-readelf
-rwxr-xr-x 1 root root 31608 May 10 2017 /usr/bin/x86_64-linux-gnu-size
-rwxr-xr-x 1 root root 31776 May 10 2017 /usr/bin/x86_64-linux-gnu-strings
-rwxr-xr-x 1 root root 228560 May 10 2017 /usr/bin/x86_64-linux-gnu-strip
-rwxr-xr-x 2 root root 48016 May 1 2016 /usr/bin/x86_64-pc-linux-gnu-pkg-config
总结:
cfns.gperf:101:1: error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute
原因可能是因为 x86_64-linux-gnu-g++ 版本不对,我这就是g++6不行,需要切到g++4.8.