0

As a novice in linux kernel compilation, it's my first time to compile a Linux kernel for myself (I'm trying to use other TCP congestion control algorithms).

I followed the steps in How to Compile a Linux Kernel. When trying to run make, I get an error:

✘ XPS-13-9360  ~/linux_compile/linux-5.1.18  make                     
  CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  DESCEND  objtool
  CC       /home/soar/linux_compile/linux-5.1.18/tools/objtool/arch/x86/decode.o
In file included from /usr/include/gelf.h:32:0,
                 from arch/x86/../../elf.h:22,
                 from arch/x86/decode.c:26:
/usr/include/libelf.h:46:4: error: unknown type name ‘Elf32_Word’
    Elf32_Word   ch_type;        /* Compression format.  */
    ^~~~~~~~~~
/usr/include/libelf.h:47:4: error: unknown type name ‘Elf32_Word’
    Elf32_Word   ch_size;        /* Uncompressed data size.  */
    ^~~~~~~~~~
/usr/include/libelf.h:48:4: error: unknown type name ‘Elf32_Word’
    Elf32_Word   ch_addralign;   /* Uncompressed data alignment.  */
    ^~~~~~~~~~
/usr/include/libelf.h:53:4: error: unknown type name ‘Elf64_Word’
    Elf64_Word   ch_type;        /* Compression format.  */
    ^~~~~~~~~~
/usr/include/libelf.h:54:4: error: unknown type name ‘Elf64_Word’
    Elf64_Word   ch_reserved;
    ^~~~~~~~~~
/usr/include/libelf.h:55:4: error: unknown type name ‘Elf64_Xword’
    Elf64_Xword  ch_size;        /* Uncompressed data size.  */
    ^~~~~~~~~~~
/usr/include/libelf.h:56:4: error: unknown type name ‘Elf64_Xword’
    Elf64_Xword  ch_addralign;   /* Uncompressed data alignment.  */
    ^~~~~~~~~~~
/usr/include/libelf.h:253:8: error: unknown type name ‘Elf32_Ehdr’
 extern Elf32_Ehdr *elf32_getehdr (Elf *__elf);
        ^~~~~~~~~~
/usr/include/libelf.h:255:8: error: unknown type name ‘Elf64_Ehdr’
 extern Elf64_Ehdr *elf64_getehdr (Elf *__elf);
        ^~~~~~~~~~
/usr/include/libelf.h:258:8: error: unknown type name ‘Elf32_Ehdr’
 extern Elf32_Ehdr *elf32_newehdr (Elf *__elf);
        ^~~~~~~~~~
/usr/include/libelf.h:260:8: error: unknown type name ‘Elf64_Ehdr’
 extern Elf64_Ehdr *elf64_newehdr (Elf *__elf);
        ^~~~~~~~~~
/usr/include/libelf.h:269:8: error: unknown type name ‘Elf32_Phdr’
 extern Elf32_Phdr *elf32_getphdr (Elf *__elf);
        ^~~~~~~~~~
/usr/include/libelf.h:271:8: error: unknown type name ‘Elf64_Phdr’
 extern Elf64_Phdr *elf64_getphdr (Elf *__elf);
        ^~~~~~~~~~
/usr/include/libelf.h:274:8: error: unknown type name ‘Elf32_Phdr’
 extern Elf32_Phdr *elf32_newphdr (Elf *__elf, size_t __cnt);
        ^~~~~~~~~~
/usr/include/libelf.h:276:8: error: unknown type name ‘Elf64_Phdr’
 extern Elf64_Phdr *elf64_newphdr (Elf *__elf, size_t __cnt);
        ^~~~~~~~~~
/usr/include/libelf.h:283:43: error: unknown type name ‘Elf32_Off’; did you mean ‘Elf32_Chdr’?
 extern Elf_Scn *elf32_offscn (Elf *__elf, Elf32_Off __offset);
                                           ^~~~~~~~~
                                           Elf32_Chdr
/usr/include/libelf.h:285:43: error: unknown type name ‘Elf64_Off’; did you mean ‘Elf64_Chdr’?
 extern Elf_Scn *elf64_offscn (Elf *__elf, Elf64_Off __offset);
                                           ^~~~~~~~~
                                           Elf64_Chdr
/usr/include/libelf.h:325:8: error: unknown type name ‘Elf32_Shdr’
 extern Elf32_Shdr *elf32_getshdr (Elf_Scn *__scn);
        ^~~~~~~~~~
/usr/include/libelf.h:327:8: error: unknown type name ‘Elf64_Shdr’
 extern Elf64_Shdr *elf64_getshdr (Elf_Scn *__scn);
        ^~~~~~~~~~
In file included from arch/x86/../../elf.h:22:0,
                 from arch/x86/decode.c:26:
/usr/include/gelf.h:44:9: error: unknown type name ‘Elf64_Half’
 typedef Elf64_Half GElf_Half;
         ^~~~~~~~~~
/usr/include/gelf.h:47:9: error: unknown type name ‘Elf64_Word’
 typedef Elf64_Word GElf_Word;
         ^~~~~~~~~~
/usr/include/gelf.h:48:9: error: unknown type name ‘Elf64_Sword’
 typedef Elf64_Sword GElf_Sword;
         ^~~~~~~~~~~
/usr/include/gelf.h:51:9: error: unknown type name ‘Elf64_Xword’
 typedef Elf64_Xword GElf_Xword;
         ^~~~~~~~~~~
/usr/include/gelf.h:52:9: error: unknown type name ‘Elf64_Sxword’
 typedef Elf64_Sxword GElf_Sxword;
         ^~~~~~~~~~~~
/usr/include/gelf.h:55:9: error: unknown type name ‘Elf64_Addr’
 typedef Elf64_Addr GElf_Addr;
         ^~~~~~~~~~
/usr/include/gelf.h:58:9: error: unknown type name ‘Elf64_Off’
 typedef Elf64_Off GElf_Off;
         ^~~~~~~~~
/usr/include/gelf.h:62:9: error: unknown type name ‘Elf64_Ehdr’
 typedef Elf64_Ehdr GElf_Ehdr;
         ^~~~~~~~~~
/usr/include/gelf.h:65:9: error: unknown type name ‘Elf64_Shdr’
 typedef Elf64_Shdr GElf_Shdr;
         ^~~~~~~~~~
/usr/include/gelf.h:70:9: error: unknown type name ‘Elf64_Section’
 typedef Elf64_Section GElf_Section;
         ^~~~~~~~~~~~~
/usr/include/gelf.h:73:9: error: unknown type name ‘Elf64_Sym’
 typedef Elf64_Sym GElf_Sym;
         ^~~~~~~~~
/usr/include/gelf.h:77:9: error: unknown type name ‘Elf64_Syminfo’
 typedef Elf64_Syminfo GElf_Syminfo;
         ^~~~~~~~~~~~~
/usr/include/gelf.h:80:9: error: unknown type name ‘Elf64_Rel’
 typedef Elf64_Rel GElf_Rel;
         ^~~~~~~~~
/usr/include/gelf.h:83:9: error: unknown type name ‘Elf64_Rela’
 typedef Elf64_Rela GElf_Rela;
         ^~~~~~~~~~
/usr/include/gelf.h:86:9: error: unknown type name ‘Elf64_Phdr’
 typedef Elf64_Phdr GElf_Phdr;
         ^~~~~~~~~~
/usr/include/gelf.h:92:9: error: unknown type name ‘Elf64_Dyn’
 typedef Elf64_Dyn GElf_Dyn;
         ^~~~~~~~~
/usr/include/gelf.h:96:9: error: unknown type name ‘Elf64_Verdef’
 typedef Elf64_Verdef GElf_Verdef;
         ^~~~~~~~~~~~
/usr/include/gelf.h:99:9: error: unknown type name ‘Elf64_Verdaux’
 typedef Elf64_Verdaux GElf_Verdaux;
         ^~~~~~~~~~~~~
/usr/include/gelf.h:102:9: error: unknown type name ‘Elf64_Verneed’
 typedef Elf64_Verneed GElf_Verneed;
         ^~~~~~~~~~~~~
/usr/include/gelf.h:105:9: error: unknown type name ‘Elf64_Vernaux’
 typedef Elf64_Vernaux GElf_Vernaux;
         ^~~~~~~~~~~~~
/usr/include/gelf.h:109:9: error: unknown type name ‘Elf64_Versym’
 typedef Elf64_Versym GElf_Versym;
         ^~~~~~~~~~~~
/usr/include/gelf.h:113:9: error: unknown type name ‘Elf64_auxv_t’
 typedef Elf64_auxv_t GElf_auxv_t;
         ^~~~~~~~~~~~
/usr/include/gelf.h:117:9: error: unknown type name ‘Elf64_Nhdr’
 typedef Elf64_Nhdr GElf_Nhdr;
         ^~~~~~~~~~
/usr/include/gelf.h:121:9: error: unknown type name ‘Elf64_Move’
 typedef Elf64_Move GElf_Move;
         ^~~~~~~~~~
/usr/include/gelf.h:125:9: error: unknown type name ‘Elf64_Lib’
 typedef Elf64_Lib GElf_Lib;
         ^~~~~~~~~
/usr/include/gelf.h:232:8: error: unknown type name ‘Elf32_Word’; did you mean ‘GElf_Word’?
        Elf32_Word *__xshndx);
        ^~~~~~~~~~
        GElf_Word
/usr/include/gelf.h:238:6: error: unknown type name ‘Elf32_Word’; did you mean ‘GElf_Word’?
      Elf32_Word __xshndx);
      ^~~~~~~~~~
      GElf_Word
arch/x86/decode.c: In function ‘is_x86_64’:
arch/x86/decode.c:43:19: error: request for member ‘e_machine’ in something not a structure or union
  switch (elf->ehdr.e_machine) {
                   ^
arch/x86/decode.c:44:7: error: ‘EM_X86_64’ undeclared (first use in this function); did you mean ‘is_x86_64’?
  case EM_X86_64:
       ^~~~~~~~~
       is_x86_64
arch/x86/decode.c:44:7: note: each undeclared identifier is reported only once for each function it appears in
arch/x86/decode.c:46:7: error: ‘EM_386’ undeclared (first use in this function); did you mean ‘EM_X86_64’?
  case EM_386:
       ^~~~~~
       EM_X86_64
In file included from arch/x86/decode.c:28:0:
arch/x86/decode.c:49:51: error: request for member ‘e_machine’ in something not a structure or union
   WARN("unexpected ELF machine type %d", elf->ehdr.e_machine);
                                                   ^
arch/x86/../../warn.h:58:14: note: in definition of macro ‘WARN’
   objname, ##__VA_ARGS__)
              ^~~~~~~~~~~
arch/x86/decode.c:52:1: error: control reaches end of non-void function [-Werror=return-type]
 }
 ^
cc1: all warnings being treated as errors
mv: cannot stat '/home/soar/linux_compile/linux-5.1.18/tools/objtool/arch/x86/.decode.o.tmp': No such file or directory
/home/soar/linux_compile/linux-5.1.18/tools/build/Makefile.build:96: recipe for target '/home/soar/linux_compile/linux-5.1.18/tools/objtool/arch/x86/decode.o' failed
make[4]: *** [/home/soar/linux_compile/linux-5.1.18/tools/objtool/arch/x86/decode.o] Error 1
/home/soar/linux_compile/linux-5.1.18/tools/build/Makefile.build:139: recipe for target 'arch/x86' failed
make[3]: *** [arch/x86] Error 2
Makefile:50: recipe for target '/home/soar/linux_compile/linux-5.1.18/tools/objtool/objtool-in.o' failed
make[2]: *** [/home/soar/linux_compile/linux-5.1.18/tools/objtool/objtool-in.o] Error 2
Makefile:66: recipe for target 'objtool' failed
make[1]: *** [objtool] Error 2
Makefile:1699: recipe for target 'tools/objtool' failed
make: *** [tools/objtool] Error 2

In libelf.h: enter image description here and elf.henter image description here then I found it's been reported before, but it's still without any solution. What can I do?

  • Not an answer to your question, but are you actually trying to compile in congestion control algorithms other than what is already available through sysctl net.ipv4.tcp_available_congestion_control? – doneal24 Jul 18 at 2:54
  • Actually I'm trying to improve the already available algorithms(bbr) performance in mobility network...And I write log in the bbr source code to find out how its bandwidth, cnwd, and rtt changes in different settings. – BluesNing Jul 18 at 3:02
0

Actually I figure out this by myself. It's look like the compiler could not find the header as my view. use the env command, the CPATH is not in /usr/include/ but /home/user/.local/include:$CPATH,so I change the CPATH to /usr/include/, using the method of lkraemer,but it's still could not work out, and the env reveal that the CPATH has been /usr/include/. I think it will be difficult to solve and shutdown my ubuntu and take a break. But I turn on my ubuntu this morning, it works out.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.