Linux usr include bits

«/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory» when compiling HTK

Ok. /usr/include/bits should be a symlink to /usr/include/x86_64-linux-gnu/bits , but running dpkg -S /usr/include/bits gives me:

dpkg-query: no path found matching pattern /usr/include/bits 

I have researched this error, and from what I can understand I ought to install gcc-multilib to resolve it. But I run into problems with this too:

The following packages have unmet dependencies: gcc-multilib : Depends: gcc-9-multilib (>= 9.3.0-3~) but it is not going to be installed 

Trying to install gcc-9-multilib gives further and further dependency problems. Researching this, I found this thread, where they solved the gcc-multilib issue, but unfortunately it doesn’t work for me. I get the same dependency issues as in the original post. Their solution was to downgrade libc6-dev running » sudo apt install libc6-dev=2.31-0ubuntu9.2 «. When I do this, it says:

Reading package lists. Done Building dependency tree Reading state information. Done libc6-dev is already the newest version (2.31-0ubuntu9.2). libc6-dev set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 

So I already have the version that resolved their problem, but my problem remains. Any suggestions on how to resolve this, and most of all get the HTK library running would be very appreciated.

EDIT:
As requested in the comments: apt policy gcc gcc-multilib gcc-9-multilib :

gcc: Installed: 4:9.3.0-1ubuntu2 Candidate: 4:9.3.0-1ubuntu2 Version table: *** 4:9.3.0-1ubuntu2 500 500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages 100 /var/lib/dpkg/status gcc-multilib: Installed: (none) Candidate: 4:9.3.0-1ubuntu2 Version table: 4:9.3.0-1ubuntu2 500 500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages gcc-9-multilib: Installed: (none) Candidate: 9.3.0-17ubuntu1~20.04 Version table: 9.3.0-17ubuntu1~20.04 500 500 http://archive.ubuntu.com/ubuntu focal-security/main amd64 Packages 500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages 9.3.0-10ubuntu2 500 500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages 

Источник

Отсутствует include «bits / c ++ config.h» при кросс-компиляции 64-битной программы на 32-битной в Ubuntu

Я запускаю 32-битную версию Ubuntu 10.10 и пытаюсь перекрестно скомпилировать 64-разрядную цель. Основываясь на моих исследованиях, я установил пакет g++ — multilib. Программа — очень простой мир приветствия:

#include int main( int argc, char** argv )
In file included from main.cpp:1: /usr/include/c++/4.4/iostream:39: fatal error: bits/c++config.h: No such file or directory compilation terminated. 

Я нашел файл c++config.h , но они находятся в каталогах i486-linux-gnu и i686-linux-gnu в /usr/include/c++/4.4/ В /usr/include/c++/bits нет c++config.h . Любые идеи о том, чего я не хватает? Компиляция без флага -m64 работает отлично (a.out создан и работает правильно). Изменить. Благодаря подсказке от @nightcracker, я немного больше исследовал структуру включения 32-разрядных и 64-разрядных систем. Я добавил ответ ниже, что «исправляет» проблему временно, но я думаю, что она сломается при следующем обновлении. В принципе, мне не хватает директории с именем /usr/include/c++/4.4/i686-linux-gnu/64 , которая должна содержать подкаталог под названием bits , который содержит отсутствующий файл include. Любая идея, какой пакет должен заботиться об этом?

Читайте также:  Android x86 linux virtualbox

Вау . У меня тоже была эта проблема. GCC 4.8 на ARMv7-CubieTruck (Cortex-A7) под управлением Ubuntu. Странная вещь (для меня) в том, что ответ Энтони исправил это. Без разницы.

6 ответов

Добавление этого ответа частично из-за того, что он исправил мою проблему с одной и той же проблемой, и поэтому я могу сама пометить этот вопрос.

Мне удалось исправить это, выполнив следующие действия:

sudo apt-get install gcc-multilib g++-multilib 

Если вы установили версию gcc / g++ , которая по умолчанию не отправляется (например, g++-4.8 on lucid), вы также захотите сопоставить версию:

sudo apt-get install gcc-4.8-multilib g++-4.8-multilib 

Убедитесь, что совпадают версии gcc and g++ установленные в вашей системе. В Ubuntu 14.04 у меня были установлены gcc-4.8 и g++-4.8 , поэтому я установил gcc-4.8-multilib и g++-4.8-multilib .

Спасибо за указатель, но sudo apt-get install gcc-multilib g++-multilib кажется лучше (он автоматически разрешает вашу версию gcc).

^ возможно нет! Предложение @ Золтана работало для меня все же. Энтони Соттил, может, тебе стоит включить комментарий Золтана в свой ответ?

@ Не стесняйтесь предлагать редактирование, когда я первоначально разместил его, я соответствовал версии, заданной в вопросе, с тех пор он изменился по сравнению с другими изменениями

У меня работает на Utuntu 16.04 x64 версия, когда попробуйте скомпилировать с флагом -m32. До того как бит / c ++ config.h не найден, sys / cdefs.h также не найден, что решается установкой пакета libc6-dev-i386.

Вы пытались добавить -I/usr/include/c++/4.4/i486-linux-gnu или -I/usr/include/c++/4.4/i686-linux-gnu ?

Это действительно работает. Любая идея о том, почему мне нужно сделать это только для 64-битных? Я пытаюсь настроить этот компьютер для работы с распределенными 64-битными сборками и хочу избежать слишком большого количества настроек.

При компиляции в RHEL 6.2 (x86_64) я установил как 32-битные, так и 64-битные libstdС++-dev-пакеты, но у меня возникла проблема «С++ config.h no such file or directory».

Отсутствует каталог /usr/include/c++/4.4.6/x86_64-redhat-linux .

cd /usr/include/c++/4.4.6/ mkdir x86_64-redhat-linux cd x86_64-redhat-linux ln -s ../i686-redhat-linux 32 

Теперь я могу скомпилировать 32-битные двоичные файлы на 64-битной ОС.

Кажется, это ошибка опечатки в этом пакете gcc. Решение:

mv /usr/include/c++/4.x/i486-linux-gnu /usr/include/c++/4.x/i686-linux-gnu/64 

Эта ошибка исправлена ​​в «gcc-4.6».

В моей 64-битной системе я заметил, что существует следующий каталог:

/usr/include/c++/4.4/x86_64-linux-gnu/32/bits 

Тогда было бы разумно, что на моей 32-битной системе, которая была настроена для 64-битного кросс-компиляции, должен быть соответствующий каталог, например:

/usr/include/c++/4.4/i686-linux-gnu/64/bits 

Я дважды проверял и этот каталог не существовал. Запуск g++ с параметром verbose показал, что компилятор действительно искал что-то в этом месте:

[email protected]:~/projects/test$ g++ -v -m64 main.cpp Using built-in specs. Target: i686-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu Thread model: posix gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) COLLECT_GCC_OPTIONS='-v' '-m64' '-shared-libgcc' '-mtune=generic' /usr/lib/gcc/i686-linux-gnu/4.4.5/cc1plus -quiet -v -imultilib 64 -D_GNU_SOURCE main.cpp -D_FORTIFY_SOURCE=2 -quiet -dumpbase main.cpp -m64 -mtune=generic -auxbase main -version -fstack-protector -o /tmp/ccMvIfFH.s ignoring nonexistent directory "/usr/include/c++/4.4/i686-linux-gnu/64" ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../i686-linux-gnu/include" #include ". " search starts here: #include search starts here: /usr/include/c++/4.4 /usr/include/c++/4.4/backward /usr/local/include /usr/lib/gcc/i686-linux-gnu/4.4.5/include /usr/lib/gcc/i686-linux-gnu/4.4.5/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. GNU C++ (Ubuntu/Linaro 4.4.4-14ubuntu5) version 4.4.5 (i686-linux-gnu) compiled by GNU C version 4.4.5, GMP version 4.3.2, MPFR version 3.0.0-p3. GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=128197 Compiler executable checksum: 1fe36891f4a5f71e4a498e712867261c In file included from main.cpp:1: /usr/include/c++/4.4/iostream:39: fatal error: bits/c++config.h: No such file or directory compilation terminated. 

Ошибка в отношении ignoring nonexistent directory была ключом. К сожалению, я до сих пор не знаю, какой пакет мне нужно установить, чтобы этот каталог отображался, поэтому я просто скопировал каталог /usr/include/c++/4.4/x86_64-linux-gnu/bits с 64-разрядной машины на /usr/include/c++/4.4/i686-linux-gnu/64/bits на моем компьютере.

Читайте также:  Kali linux boot mode

Теперь компиляция с помощью только -m64 работает правильно. Главный недостаток заключается в том, что это еще не правильный способ сделать что-то, и я предполагаю, что в следующий раз, когда Update Manager установит и обновит до g++, все может сломаться.

Источник

asm/errno.h: No such file or directory

I am building gcc 4.1 from source. I think I have to install build-essential . However installing that package in ubuntu 12.04 will automatically download and install gcc 4.6 and I don’t want that. Is there any other way?

same problem when i cross compile for s390 on x86 sles1032bit In file included from /var/tmp/toolchain/experiment_2/sysroot.s390x/usr/include/errno.h:35:0, from /var/tmp/toolchain/experiment_2/gcc-4.8.5/libgcc/../gcc/tsystem.h:93, from /var/tmp/toolchain/experiment_2/gcc-4.8.5/libgcc/libgcc2.c:27: /var/tmp/toolchain/experiment_2/sysroot.s390x/usr/include/bits/errno.h:24:26: fatal error: linux/errno.h: No such file or directory # include ^ compilation terminated. make[4]: *** [_negdi2.o] Error 1

11 Answers 11

I think the package you want is linux-libc-dev . I encountered this when building 32-on-64; so I needed linux-libc-dev:i386 .

With both installed on Ubuntu 15.10, diff -ur /usr/include/x86_64-linux-gnu/asm/ /usr/include/i386-linux-gnu/asm/ shows no differences. Some other files outside those directories are provided by both packages, but apparently this is ok, and you only have multiple copies of those 62 files totalling ~340k. dpkg -L linux-libc-dev | diff -ur — <(dpkg -L linux-libc-dev:i386) shows that both packages provide the same files outside the arch-specific include directory.

So if you’re going to symlink instead of keeping the package manager happy by installing linux-libc-dev:i386 on a 64bit system, use ln -s x86_64-linux-gnu /usr/include/i386-linux-gnu to make a relative symlink.

ln -s /usr/include/asm-generic /usr/include/asm 

Indeed, it looks similar to what you would get if you do apt-get install gcc-multilib ( apt-file search /usr/include/asm shows this package) and on my system, having that installed, /usr/include/asm is a symbolic link. Not sure whether this package depends on build-essential or not though.

sudo ln -s /usr/include/asm-generic /usr/include/asm 

The reason being that what GCC expects to be called /usr/include/asm is renamed to /usr/include/asm-generic in some distros.

sudo apt-get install linux-libc-dev:i386 

This solved it for me on Debian 10, even though I was compiling with an LLVM-based compiler:

sudo apt install gcc-multilib 

/usr/include/asm/errno.h is part of the linux headers. I can’t speak directly to Ubuntu 12.04, but in general you can download the linux sources as a package for your distro and it shouldn’t require you to download/install gcc. Failing that, you can manually download the linux headers for the version of your kernel ( uname -a ) and use an include directive to CFLAGS to specify the directory to look for those.

Читайте также:  Linux горячая клавиша вставить

Edit: sudo apt-get install linux-headers-generic may work for you.

my kernel is 3.2.0-24-generic. apt-get install linux-headers-3.2.0-2 shows it is installed. apt-get install linux-headers-generic will download linux-headers-3.2.0-37 which is wrong

I’d try a few things. One is find /usr/include -name errno.h to see if it’s hiding in version-specific directory. The other is look in /usr/src/ to see if you have the kernel source downloaded; if not, see if there’s a package to download it (like linux-sources maybe?). When found, point to it with CFLAGS -I/path/to/src/include .

You are missing part of the development packages. I don’t know Ubuntu, but you should be able to ask it’s package management system to install the package containing /usr/include/asm/errno.h .

Do not copy some file with a similar name from somewhere on your system (or, even worse, from somewhere else). Missing files might mean that some package is damaged; again, ask your package manager to check everything and (re)install missing/broken pieces.

Unless you are running some LTS release, upgrade. Your Ubuntu is some 2 years old, i.e., ancient.

While we are at this, why on this beautiful planet are you building such an ancient compiler? Current GCC is just released 4.9.0, anything before 4.7 is ancient history, not longer supported.

Источник

Оцените статью
Adblock
detector