Re: undefined reference to errno

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 try including #include <linux/errno.h>.

 You should include /usr/src/linux_x_y_z/include  include and not the just 
/usr/include while working with modules.

Raghu

On Fri, 20 Feb 2004, cam wrote:

> Hello all,
> 
> I'm attempting to do some work with the sysctl interface from a module. I am
> able to correctly build my module using make modules but I get the "undefined
> reference to errno" when I attempt the make modules_install step.
> 
> Some trawling on the net has revealed that this started happening with various
> source trees using older conventions e.g. from 
> 
> http://www.compusys.co.uk/Compusys/HPC/Cluster+Admin+Tips/Compilation+errors+with+GCC+Version+3.2+and+Open+PBS+version+2.3.16.htm
> -------------------------------------------------------
> "Since version 2.9 of the GCC compiler the compiler has become a lot stricter
> over declaring external references.
> Undefined reference to ?errno? 
> 
> In most cases this is not a problem, but only when the programming of a library
> has become slightly lax. Once common error is to use the phrase:
> 
> extern int errno;
> 
> in c code rather than the correct method of:
> 
> #include <errno.h>
> 
> This can be seen in a few of the libraries supplied with Open PBS. To fix this
> problem cd to the directory which includes the source code and type the
> following command:
> 
> grep -rs ?extern int errno? *
> 
> If any files return as having the line, then replace the line with the correct
> version as shown above, using your favourite text editor."
> -------------------------------------------------------
> 
> When I run this against my development tree, the only place errno is defined is
> in include/linux/unistd.h I notice on the lxr site that this is currently valid
> code.
> 
> For some background, my module is a networking component and I need to fetch
> some /proc info. Since I am in the kernel I can't use the userspace sysctl lib
> and have to:
> 
> #include <linux/sysctl.h>
> #include <linux/unistd.h>
> 
> and use the syscall1 macro. This part of the code seems fine. In order to test
> it, I tried a small userspace program which generated the same "unreferenced
> errno" error until I did the following :
> 
> #include <linux/errno.h>
> 
> Now the userspace example works but it doesn't fix the module.
> 
> WTF is going on here? I don't know enough about this to fix it but I'd be
> grateful for any pointers even if its to a site or book worth reading about
> this because I know my ignorance of compiling and linking isn't helping me
> here. I have taken a look at Johnson & Troans "Linux Application Development"
> and Rubini's "Understanding the Linux Kernel" but there is very little
> discussion of the linking phase of a kernel build.
> 
> There are so many returns for this on google that it must have tripped up a few
> people - just none of the solutions match my problem.
> 
> Any help gratefully received,
> cam
> 
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail SpamGuard - Read only the mail you want.
> http://antispam.yahoo.com/tools
> 
> --
> Kernelnewbies: Help each other learn about the Linux kernel.
> Archive:       http://mail.nl.linux.org/kernelnewbies/
> FAQ:           http://kernelnewbies.org/faq/
> 


--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux