clinuxlinkercross-build

How to get linker to report where it is linking to for a given function


I have an issue trying to cross build win32 and win64 exes on a linux host.

I am using the mingw cross build toolchains

my .c file includes time.h in order to use clock_gettime() in main()

now this is a POSIX thing so no guarantee it is windows portable

however, on another laptop with a similar (but obviously not identical) setup it does compile and link no problem

on this laptop (a new one I am migrating to) I get a linker error:

undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status

what I would like to be able to do is somehow have the linker on the other machine tell me where it is finding the .dll with clock_gettime() in it

In order for me to see whether the similar .dll is present on the new laptop and whether the clock_gettime() symbol is avaiable in it

Is it possible to get the linker to report this info, some sort of verbose mode perhaps. I've gone down the GIYF route but drawn a blank thus far.


Solution

  • To use clock_gettime() as defined in <time.h> when cross building for windows using mingw toolchain on a linux host you must link to pthread not rt

    for example:

    source code, example.c, looks like this:

    #include <time.h>
    ...
    struct timespec t1;
    ...
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1);
    

    native build looks like this:

    gcc example.o -lrt -o example
    

    win32 cross-build looks like this:

    i686-w64-mingw32-gcc -I/usr/local/i686-w64-mingw32/include  example.o -L/usr/local/i686-w64-mingw32/bin -lpthread -lws2_32 -o example.exe
    

    Unfortunately, I am none the wiser on how to get the linker to tell me in which library it has found a function that it has successfully linked to

    i.e. if I could have somehow got the linker to inform me that it had found clock_gettime() in libpthread on my other machine that was successfully linking, I could have saved a lot of messing about fixing the link error issue on this machine.