На какую библиотеку я должен связать расширение GNU libc tdestroy? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь связать программу переменного тока, скомпилированную с помощью компилятора gcc.Компоновщик не находит символ tdestroy, который является расширением GNU для libc (#define __USE_GNU, за которым следует #include <search.h>).Есть ли дополнительная библиотека, с которой мне нужно связываться, чтобы компоновщик мог найти этот символ?

~ Update ~: я только что понял, что он действительно связывает мою среду Linux, но в Windows я все еще получаюошибка undefined reference to 'tdestroy' с mingw / gcc, даже после использования _GNU_SOURCE вместо __USE_GNU.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Вы никогда не должны определять __USE_GNU (sic), это внутренний символ.Вам нужно определить _GNU_SOURCE, см. Макросы тестирования функций .

Если вы сделаете это, функция tdestroy станет доступной.

Это также хорошоидея построить с -Werror=implicit-function-declaration, чтобы отсутствующие прототипы приводили к сбою компилятора, а не к сбою компоновщика.

0 голосов
/ 09 февраля 2019

Не используйте __USE_GNU.Это внутренний макрос GLIBc.В справочной странице tdestroy сказано, что макрос, который нужно определить в начале: _GNU_SOURCE.

#define _GNU_SOURCE
#include <search.h>
void *td = tdestroy;
int main(){}

компилируется без ошибки компоновщика (дополнительные библиотеки не требуются).

...