[Nelug] ld and unit testing in C

Martin Ward martin at gkc.org.uk
Tue Sep 25 11:58:28 UTC 2007

On Tuesday 25 Sep 2007 00:02, Oliver Burnett-Hall wrote:
> > Have you tried the option --unresolved-symbols=ignore-all
> > or --unresolved-symbols=ignore-in-object-files ?
> I'd missed that one in the ld man page, and it does let me run the
> linker successfully.  However it just means I now get errors at run time
> instead of link time:
> # ./check_ranges
>                                        ~/src/gnumeric/gnumeric/test/unit
> ./check_ranges: symbol lookup error: ./check_ranges: undefined symbol:
> gnm_app_prefs
> [gnm_app_prefs is a symbol referenced from ranges.o that I'm really not
> interested in]
> I really don't understand this stuff at all; the books I've got on C
> programming are all platform agnostic so don't tell you much about
> compiling and linking, and the docs I've found for gcc are either
> trivial or assume that you understand all this already.  Can anyone
> point me in the direction of something that might help me understand?

This works for me: I added a definition to one of the source files in
a program I am working on, like this:

void bar();

     int i;

Here, foo() is never called, and bar() is not defined anywhere.

A normal link gave this error:

% gcc -o zzz *.o
pack.o: In function `foo':
pack.c:(.text+0xd): undefined reference to `bar'
collect2: ld returned 1 exit status

Adding the option makes the error go away:

% gcc -Xlinker --unresolved-symbols=ignore-in-object-files -o zzz *.o

And the resulting executable works.

gnm_app_prefs is a pointer, isn't it? Is it referenced in one of the functions
you call from ranges.c? Have you tries creating a dummy definition
for it (as a void pointer)?


martin at gkc.org.uk http://www.cse.dmu.ac.uk/~mward/ Erdos number: 4
G.K.Chesterton web site: http://www.cse.dmu.ac.uk/~mward/gkc/

More information about the Nelug mailing list