openwrt编译qca驱动不成功。gcc -isystem问题。
在最新openwrt里移植qca驅(qū)動(dòng)發(fā)現(xiàn),編譯不成功,錯(cuò)誤如正下:
GNU C (OpenWrt/Linaro GCC 4.8-2014.04 unknown) version 4.8.3 (mips-openwrt-linux-uclibc)compiled by GNU C version 4.4.7 20120313 (Red Hat 4.4.7-16), GMP version 5.1.3, MPFR version 3.1.2, MPC version 1.0.2 GGC heuristics: --param ggc-min-expand=97 --param ggc-min-heapsize=126544 Compiler executable checksum: 7a8d9c3fb361f26d926f81803aa9b56a GNU assembler version 2.24.0 (mips-openwrt-linux-uclibc) using BFD version (GNU Binutils) 2.24.0 In file included from ./arch/mips/include/asm/page.h:15:0,from /mnt/openwrt-jinbao/build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/qca-wifi-g-perf/qca-wifi-g/os/linux/ath_hal/../../../include/compat.h:109,from <command-line>:0: ./arch/mips/include/asm/mipsregs.h:769:33: error: unknown type name 'u16'static inline int mm_insn_16bit(u16 insn)在EXTRA_FLAGS上增加 -v -H,打印出頭文件查找過(guò)程。則日志如下: GNU C (OpenWrt/Linaro GCC 4.8-2014.04 unknown) version 4.8.3 (mips-openwrt-linux-uclibc)compiled by GNU C version 4.4.7 20120313 (Red Hat 4.4.7-16), GMP version 5.1.3, MPFR version 3.1.2, MPC version 1.0.2 GGC heuristics: --param ggc-min-expand=97 --param ggc-min-heapsize=126544 ignoring duplicate directory "include"as it is a non-system directory that duplicates a system directory
as it is a non-system directory that duplicates a system directory #include "..." search starts here: #include <...> search starts here:./arch/mips/includearch/mips/include/generated./arch/mips/include/uapiarch/mips/include/generated/uapi./include/uapiinclude/generated/uapi./arch/mips/include/asm/mach-ath79./arch/mips/include/asm/mach-generic
自己寫了一個(gè)hello程序?qū)iT用于編譯測(cè)試,則:
?
compiled by GNU C version 4.4.7 20120313 (Red Hat 4.4.7-16), GMP version 5.1.3, MPFR version 3.1.2, MPC version 1.0.2 GGC heuristics: --param ggc-min-expand=97 --param ggc-min-heapsize=126544 #include "..." search starts here: #include <...> search starts here:./arch/mips/includearch/mips/include/generated <strong> include</strong>./arch/mips/include/uapiarch/mips/include/generated/uapi./include/uapiinclude/generated/uapi./arch/mips/include/asm/mach-ath79./arch/mips/include/asm/mach-generic/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include/usr/include End of search list.兩者對(duì)比可知,在編譯qca時(shí),有“include”目錄與另一個(gè)東東重復(fù)了,并忽略掉了它,這樣在查找<linux/types.h>時(shí)就找到了uapi/linux里,最后則u16沒(méi)有定義。
日志已經(jīng)說(shuō)的很明白了。gcc參數(shù)里有修改系統(tǒng)目錄的地方。在一個(gè)makefile找到了isystem ?DIR。這個(gè) DIR正好是/xxx/linuxkernel/include,這樣就造成了重復(fù)。
gcc的參數(shù) -isystem dir
If a standard system include directory, or a directory specified with-isystem, is also specified with-I, the -Ioption is ignored. The directory is still searched but as asystem directory at its normal position in the system include chain. This is to ensure that GCC's procedure to fix buggy system headers andthe ordering for theinclude_next directive are not inadvertently changed. If you really need to change the search order for system directories,use the-nostdinc and/or -isystem options.?
某目錄如果是標(biāo)準(zhǔn)系統(tǒng)include目錄,或它由-isystem指定了,而它也被 gcc -I指定了,則gcc會(huì)忽略此條-I項(xiàng)。作為系統(tǒng)目錄,這個(gè)目錄仍會(huì)被搜查(按它在系統(tǒng)inlcude鏈的優(yōu)先級(jí)位置處被搜查)這可能確保GCC 程序解決各種古怪的系統(tǒng)頭文件并且設(shè)定include指令是被明確修改的。如果你真想修改頭文件系統(tǒng)目錄,則可以使用-nostdinc and/or-isystem。
在 使用-isystem dir時(shí),如果dir 是原有系統(tǒng)目錄之一,則就造成了重復(fù),那GCC就認(rèn)為你是在修改系統(tǒng)目錄鏈上優(yōu)先級(jí)位置。它會(huì)忽略之前的位置,把dir安排到鏈的尾部。
總結(jié)
以上是生活随笔為你收集整理的openwrt编译qca驱动不成功。gcc -isystem问题。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CDU集训代码:基础算法和数据结构2
- 下一篇: 看代码学知识之(2) ListView无