undefined reference to errno

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

 



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/


[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