Как получить компоновщик, чтобы сообщить, где он ссылается на данную функцию
У меня проблема с попыткой кросс-сборки win32 и win64 exes на хосте linux.
Я использую набор инструментов mingw cross build
мой .c
файл включает в себя time.h
для того, чтобы использовать clock_gettime()
в main()
теперь это POSIX
вещь, так что нет гарантии, что это портативный Windows
однако на другом ноутбуке с аналогичной (но явно не идентичной) настройкой он компилируется и связывается без проблем
на этом ноутбуке (новый, на который я мигрирую) я получаю ошибку компоновщика:
undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status
я хотел бы, чтобы компоновщик на другой машине сказал мне, где он находит.dll с clock_gettime() в нем
Для того, чтобы я увидел, есть ли аналогичный.dll на новом ноутбуке и есть ли в нем символ clock_gettime()
Можно ли заставить компоновщик сообщить эту информацию, возможно, в каком-то подробном режиме. Я пошел по маршруту GIYF, но до сих пор не указал.
2 ответа
Использовать clock_gettime()
как определено в <time.h>
когда кросс-сборка для окон с использованием mingw toolchain на хосте Linux, вы должны сделать ссылку на pthread
не rt
например:
Исходный код, example.c, выглядит так:
#include <time.h>
...
struct timespec t1;
...
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1);
Нативная сборка выглядит так:
gcc example.o -lrt -o example
Win32 кросс-билд выглядит так:
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
К сожалению, я не знаю, как заставить компоновщик сказать мне, в какой библиотеке он нашел функцию, с которой он успешно связался
то есть, если бы я мог каким-то образом заставить компоновщик сообщить мне, что он обнаружил clock_gettime() в libpthread на моем другом компьютере, который успешно связывался, я мог бы избавиться от множества ошибок по исправлению ошибки связи на этом компьютере.
Компилировать с -lrt
что необходимо для версии glibc < 2.17.
Что, вероятно, происходит на другом ноутбуке, так это то, что он имеет последнюю версию glibc >=2.17, в которой clock_gettime()
является частью libc. Но старше в glibcs, это отдельная библиотека. Следовательно, вам нужно было связать это самостоятельно.