Как я могу решить stdarg.h Нет такого файла или каталога при компиляции модуля ядра Linux вне дерева?
У меня есть внешний модуль ядра Linux, который мне нужно скомпилировать. Когда я выполняю «make» в каталоге модуля ядра, я получаю:
«fatal error: stdarg.h: No such file or directory»
Перед началом сборки я установил заголовочный файл на основе моего дистрибутива Linux.
$sudo apt-get install kernel-headers-$(uname -r)
Как я могу решить эту ошибку компиляции? (мой дистрибутив — Ubuntu 16.04 с linux-headers-4.15.0-42-generic)
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в.
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир.
Чтобы выровнять элемент
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим.
Ответы 1
Я провел поиск stdarg.h с помощью команды «locate», чтобы узнать, могу ли я запустить этот файл в системе.
Он говорит мне, что есть по крайней мере один файл stdarg.h, предоставленный компилятором.
Я попытался включить путь «/usr/lib/gcc/i686-linux-gnu/5/include» в Makefile модуля ядра, чтобы можно было подобрать stdarg.h. Не получилось (при сборке не резолвилась еще одна ссылка на stdarg.h в официальном шапке ядра).
Я наконец создал символическую ссылку прямо под: /usr/src/linux-headers-4.15.0-42-generic/include
$sudo ln -s /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h stdarg.h
Этого было достаточно, чтобы решить проблему компиляции.
Мне интересно, должны ли заголовки ядра поставляться с реализацией stdarg.h по умолчанию (это первый раз, когда я сталкиваюсь с этой проблемой). Я также читал, что компилятор предоставляет одну реализацию, и в большинстве случаев лучше использовать версию компилятора.
Обновленное примечание:, если приведенное выше решение по-прежнему не решает проблему:
Перед повторным запуском make выполните make clean. Сделайте ls -la в папке и найдите файл «.cache.mk». Если это все еще там, удалите его и снова запустите make. Это должно решить проблему.
How can I solve stdarg.h No such file or directory while compiling out-of-tree Linux kernel module?
I have an out-of-tree Linux kernel module that I need to compile. When I execute «make» in the kernel module directory I am getting: «fatal error: stdarg.h: No such file or directory» Before starting the build I installed the header file based on my Linux distribution. $sudo apt-get install kernel-headers-$(uname -r) How can I solve this compilation error? (my distribution is Ubuntu 16.04 with linux-headers-4.15.0-42-generic)
4 Answers 4
I ran a search of stdarg.h with the «locate» command to see if I can sport the file on the system.
It tells me there is at least one stdarg.h provided by the compiler.
I tried to include the path «/usr/lib/gcc/i686-linux-gnu/5/include» in the kernel module Makefile so stdarg.h can be picked up. It did not work (while building, another reference to stdarg.h in the official kernel header was not being resolved).
I finally created a symlink directly under: /usr/src/linux-headers-4.15.0-42-generic/include
$sudo ln -s /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h stdarg.h
This was just enough to solve the compilation issue.
I am wondering if the kernel headers should come with an implementation of stdarg.h by default (that is the first time I encounter this issue). I have also read that the compiler provide one implementation and most of the time it is better to use the compiler version.
Updated note: if the above solution still does not solve the problem:
Before running make again, do a make clean. Do a ls -la in the folder and look for a «.cache.mk» file. If this is still there, remove it and run «make» again. It should solve the problem.
stdarg.h not found
I am using clang to compile C++. I invoke clang using clang *.cc -o ray . However, I get this error message:
—— mode: compilation; default-directory: «~/Programmeren/ray/» ——
Compilation started at Thu Aug 11 14:50:30 clang *.cc -o ray In file included from Engine.cc:1: In file included
from ./Prefix.hh:1: In file included from
/usr/include/c++/4.2.1/string:46: In file included from
/usr/include/c++/4.2.1/bits/char_traits.h:45: In file included from
/usr/include/c++/4.2.1/bits/stl_algobase.h:70: In file included from
/usr/include/c++/4.2.1/iosfwd:44: In file included from
/usr/include/c++/4.2.1/i686-apple-darwin10/x86_64/bits/c++locale.h:49:
In file included from /usr/include/c++/4.2.1/cstdarg:50:
/usr/include/stdarg.h:4:15: fatal error: ‘stdarg.h’ file not found
#include_next
^ 1 error generated.
Compilation exited abnormally with code 1 at Thu Aug 11 14:50:30
What system (OS) are you on? Include paths in Clang are stil hardcoded in, unfortunately, so You’ll have to either edit the source code (and recompile), or switch to an already hacked-in setup.
@rubenvb My operating system is Mac OS X 10.7, using clang 2.1. However, I have two versions of clang installed. clang 2.1 and 1.7. I copied clang 2.1 over to /usr/bin . I have no problem reinstalling clang if it is necessary.
WTP: I thought Clang was at 2.9. If you’re running hypermoderd Mac OS, I’d think you’d need the newest Clang. See here: llvm.org/releases/download.html
2 Answers 2
I copied clang 2.1 over to /usr/bin.
This most likely is the cause of your problems. Don’t do that, where «that» is moving a piece of system software from one directory to another. This just doesn’t work with a lot of UNIX system software. Such applications often depend on the location of the executable to indicate the location of files needed by that application. This is why the makefiles for these applications often have very involved install targets.
The thing to do is to use make install target rather than mv . Better yet, just leave it where it was built and modify your search path so that the target directory is before /usr/bin . Leave /usr/bin alone. That directory is not yours to modify.
Addendum
Neither fink ( http://www.finkproject.org ) nor MacPorts ( http://www.macports.org ) touches /usr/bin . The developers of those projects know better. I strongly encourage you to follow their lead. Even better, use one (or both) of those tools to manage your ported applications.
I added /Developer/usr/bin/ in front of the path as you said, but I still get the same error. which clang says /Developer/usr/bin/clang .
Stdarg h linux kernel
Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.
- VMware Technology Network
- :
- Desktop Hypervisor
- :
- VMware Workstation
- :
- VMware Workstation Pro Discussions
- :
- Compiling vmmon module fails on linux kernel 5.16.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page
phiroict
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
After upgrading to the 5.16 kernel on my main machine:
uname -a :
5.16.0-arch1-1 #1 SMP PREEMPT Mon, 10 Jan 2022 20:11:47 +0000 x86_64 GNU/Linux
I found that recompiling the vmmon module fails with
/tmp/modconfig-lXl0QD/vmnet-only/vm_assert.h:43:10: fatal error: stdarg.h: No such file or directory43 | #include
There are more errors, all based on not finding the stdarg.h header file. Now, the linux-headers have been installed, and compiling on the previous kernel worked ok.
When starting workstation pro (vmware —version: VMware Workstation 16.2.1 build-18811642) it offers to recompile the modules
So this looks like more customers may run into as the 5.16 becomes more current.
Rebuilding on the commandline with:
vmware-modconfig --console --install-al
Results in the same error, it looks like the process does not find the linux headers anymore. The header missing is in the source directory
cd /usr/src/linux/includefind . -name stdarg.h -type f./linux/stdarg.h
Which leads me to believe that the Makefile does not look into that directory when building. Can somebody point me to where the kernel headers path for compiling is set?
ajgringo619
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
How did you install VMware : by .bundle or Arch package? I’ve been using aur/vmware-workstation and it’s never failed me, including with the latest 5.16 kernel.
mkubecek
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
There are some build issues with 5.16 kernel and also an older bug which affects vmmon with any kernel >= 5.11. You can use workstation-16.2.1 branch from this repository until VMware fixes the issues.
ajgringo619
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
How did you install VMware : by .bundle or Arch package? I’ve been using aur/vmware-workstation and it’s never failed me, including with the latest 5.16 kernel.
phiroict
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ah, did not even consider that one, will try that and will let you know, Thanks!
phiroict
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
sudo ./VMware-Workstation-Full-16.2.1-18811642.x86_64.bundle -u vmware-workstation
virtual_k
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
# CPATH=/usr/src/linux/include vmware-modconfig --console --install-all
this assumes `/usr/src/linux/include` points to the include directory from the current kernel source tree (kernel headers)
continuum
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Please edit the line starting with scsi0:0.redo — it makes you look like a spammer .
________________________________________________
Do you need support with a VMFS recovery problem ? — send a message via skype «sanbarrow»
I do not support Workstation 16 at this time .
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Ulli. It is (was) spam and I’ve removed the post.
nexuscore
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank You so much. Was trying to figure this out for awhile on the latest Fedora 35 update. Your fix worked with the following:
sudo CPATH=/usr/src/kernels/5.16.5-200.fc35.x86_64/include/linux vmware-modconfig —console —install-all
WhyItsLikeThis
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
> sudo CPATH=/usr/src/kernels/5.16.5-200.fc35.x86_64/include/linux vmware-modconfig —console —install-all
@nexuscoreThank you for providing that command. I don’t really know what that command is actually doing. But it did work. When I launched VMware again, it didn’t ask for vmmon and vmnet updates anymore and launched VMWare Workstation without an issue.
What I don’t understand is, why vmnet and vmnet modules SUCKS so much!? In each kernel update, it tends to break. Is it because these two modules are proprietary and need continuous maintenance!?
Does every user have to google or post in the VMware community to find hacks/workaround after module update?!
Aren’t modules-update supposed to be rolled after proper testing? And most importantly, if we know that «hacks» like this works, then doesn’t VMware should use it to patch the update?!