clang не может автоматически завершить код ядра в режиме Emacs - PullRequest
0 голосов
/ 28 октября 2019

когда модифицируется какой-либо драйвер ядра, emacs не выполняет для меня код автоматически

например. Когда вы наберете " struct devic " и " Mx company-complete ", я ожидаю, что целое слово "устройство" будет завершено, по крайней мере, или появится меню завершения. Но я получаю подсказку " Не найдено завершение " в эхо-записи erea.

Кто-нибудь сталкивался с такой же проблемой? Пожалуйста, помогите мне.

Некоторые советы также были бы очень благодарны.

Версия Clang:

Clang версия 7.0.1-9 +b1 (tags / RELEASE_701 / final) Цель: i686-pc-linux-gnu Модель потока: posix УстановленDir: / usr / bin

Версия Emacs:

GNU Emacs 26.1

Содержимое переменной "company-clang-arguments":

company-clang-arguments является переменнойопределено в «company-clang.el». Его значение равно ("-I / home / gnu / linux-5.3.6 / include /" "-I / home / gnu / linux-5.3.6 / arch / arm / include /") Исходное значение nil Local в буфереMakefile;глобальное значение равно nil

Значение этой переменной является локальным для каталога, устанавливается файлом '/home/gnu/linux-5.3.6/.dir-locals.el'.

Документация:Дополнительные аргументы для передачи в Clang при завершении. Файлы префиксов (-include ...) могут быть выбраны с помощью «company-clang-set-prefix» или автоматически с помощью специального «company-clang-prefix-guesser».

Вы можете настроить эту переменную.

Содержимое переменной «conpany-backends»:

company-backends - это переменная, определенная в «company.el». Его значение (company-c-headers company-bbdb company-eclim company-clang company-xcode company-cmake company-capf company-files (company-dabbrev-код компании-gtags company-etags company-Keywords) компания-странная компания-dabbrev)

Первоначальное значение было (company-bbdb company-eclim company-clang company-xcode company-cmake company-capf company-files (company-dabbrev-code company-gtags company-etags company-Keywords))company-oddmuse company-dabbrev)

Эта переменная безопасна как локальная переменная файла, если ее значение
удовлетворяет предикату 'company-safe-backends-p'.

Вот вывод буфера "clang-error"

Mon Oct 28 10:56:16 2019
clang failed with error 1:
/usr/bin/clang -fsyntax-only -Xclang -code-completion-macros -x c -I/home/gnu/linux-5.3.6/include/ -I/home/gnu/linux-5.3.6/arch/arm/include/ -Xclang -code-completion-at=-:230:7 -

In file included from <stdin>:7:
In file included from /home/gnu/linux-5.3.6/include/linux/kernel.h:13:
/home/gnu/linux-5.3.6/include/linux/log2.h:197:15: error: unknown type name '__attribute_const__'
static inline __attribute_const__
              ^
/home/gnu/linux-5.3.6/include/linux/log2.h:198:1: error: expected identifier or '('
int __order_base_2(unsigned long n)
^
In file included from <stdin>:7:
In file included from /home/gnu/linux-5.3.6/include/linux/kernel.h:15:
In file included from /home/gnu/linux-5.3.6/include/linux/printk.h:6:
/home/gnu/linux-5.3.6/include/linux/init.h:144:13: error: expected parameter declarator
extern char __initdata boot_command_line[];
            ^
/home/gnu/linux-5.3.6/include/linux/init.h:51:30: note: expanded from macro '__initdata'
#define __initdata      __section(.init.data)
                                  ^
/home/gnu/linux-5.3.6/include/linux/init.h:144:13: error: expected ')'
/home/gnu/linux-5.3.6/include/linux/init.h:51:30: note: expanded from macro '__initdata'
#define __initdata      __section(.init.data)
                                  ^
/home/gnu/linux-5.3.6/include/linux/init.h:144:13: note: to match this '('
/home/gnu/linux-5.3.6/include/linux/init.h:51:29: note: expanded from macro '__initdata'
#define __initdata      __section(.init.data)
                                 ^
/home/gnu/linux-5.3.6/include/linux/init.h:144:24: error: expected function body after function declarator
extern char __initdata boot_command_line[];
                       ^
/home/gnu/linux-5.3.6/include/linux/init.h:151:6: error: expected parameter declarator
void __init init_rootfs(void);
     ^
/home/gnu/linux-5.3.6/include/linux/init.h:50:27: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                  ^
/home/gnu/linux-5.3.6/include/linux/init.h:151:6: error: expected ')'
/home/gnu/linux-5.3.6/include/linux/init.h:50:27: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                  ^
/home/gnu/linux-5.3.6/include/linux/init.h:151:6: note: to match this '('
/home/gnu/linux-5.3.6/include/linux/init.h:50:26: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                 ^
/home/gnu/linux-5.3.6/include/linux/init.h:151:6: error: expected function body after function declarator
void __init init_rootfs(void);
     ^
/home/gnu/linux-5.3.6/include/linux/init.h:50:39: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                              ^
/home/gnu/linux-5.3.6/include/linux/init.h:290:6: error: expected parameter declarator
void __init parse_early_param(void);
     ^
/home/gnu/linux-5.3.6/include/linux/init.h:50:27: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                  ^
/home/gnu/linux-5.3.6/include/linux/init.h:290:6: error: expected ')'
/home/gnu/linux-5.3.6/include/linux/init.h:50:27: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                  ^
/home/gnu/linux-5.3.6/include/linux/init.h:290:6: note: to match this '('
/home/gnu/linux-5.3.6/include/linux/init.h:50:26: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                 ^
/home/gnu/linux-5.3.6/include/linux/init.h:290:6: error: expected function body after function declarator
void __init parse_early_param(void);
     ^
/home/gnu/linux-5.3.6/include/linux/init.h:50:39: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                              ^
/home/gnu/linux-5.3.6/include/linux/init.h:291:6: error: expected parameter declarator
void __init parse_early_options(char *cmdline);
     ^
/home/gnu/linux-5.3.6/include/linux/init.h:50:27: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                  ^
/home/gnu/linux-5.3.6/include/linux/init.h:291:6: error: expected ')'
/home/gnu/linux-5.3.6/include/linux/init.h:50:27: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                  ^
/home/gnu/linux-5.3.6/include/linux/init.h:291:6: note: to match this '('
/home/gnu/linux-5.3.6/include/linux/init.h:50:26: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                 ^
/home/gnu/linux-5.3.6/include/linux/init.h:291:6: error: expected function body after function declarator
void __init parse_early_options(char *cmdline);
     ^
/home/gnu/linux-5.3.6/include/linux/init.h:50:39: note: expanded from macro '__init'
#define __init          __section(.init.text) __cold  __latent_entropy __noinitretpoline
                                              ^
In file included from <stdin>:7:
In file included from /home/gnu/linux-5.3.6/include/linux/kernel.h:15:
/home/gnu/linux-5.3.6/include/linux/printk.h:145:24: error: expected parameter declarator
static inline __printf(1, 2) __cold
                       ^
/home/gnu/linux-5.3.6/include/linux/printk.h:145:24: error: expected ')'
/home/gnu/linux-5.3.6/include/linux/printk.h:145:23: note: to match this '('
static inline __printf(1, 2) __cold
                      ^
/home/gnu/linux-5.3.6/include/linux/printk.h:145:30: error: expected function body after function declarator
static inline __printf(1, 2) __cold
                             ^
In file included from <stdin>:7:
In file included from /home/gnu/linux-5.3.6/include/linux/kernel.h:17:
In file included from /usr/include/i386-linux-gnu/asm/byteorder.h:5:
In file included from /home/gnu/linux-5.3.6/include/linux/byteorder/little_endian.h:5:
In file included from /home/gnu/linux-5.3.6/include/uapi/linux/byteorder/little_endian.h:13:
In file included from /home/gnu/linux-5.3.6/include/linux/swab.h:5:
In file included from /home/gnu/linux-5.3.6/include/uapi/linux/swab.h:7:
In file included from /home/gnu/linux-5.3.6/arch/arm/include/asm/swab.h:19:
/home/gnu/linux-5.3.6/arch/arm/include/uapi/asm/swab.h:28:15: error: unknown type name '__attribute_const__'
static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
              ^
/home/gnu/linux-5.3.6/arch/arm/include/uapi/asm/swab.h:28:8: error: 'inline' can only appear on functions
static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
       ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

часть моего init.el, выпущенного для компании:

(require 'company)
(add-hook 'after-init-hook 'global-company-mode)
(setq company-backends (delete 'company-semantic company-backends))
(define-key c-mode-map [(tab)] 'company-complete)
(define-key c++-mode-map [(tab)] 'company-complete)
(add-to-list 'company-backends 'company-c-headers)

и полная часть файла .dir-locals.el в /home/gnu/linux-5.3.6

((nil . ((company-clang-arguments . ("-I/home/gnu/linux-5.3.6/include/"
                                     "-I/home/gnu/linux-5.3.6/arch/arm/include/")))))
...