Как заметил Роб Кеннеди, лучший способ - это проверить внутри ваших строительных скриптов, существуют ли эти функции или нет. Я знаю, что с autoconfig это довольно просто, но, вероятно, и с другими кросс-платформенными инструментами создания сценариев.
Тогда вы просто помещаете в свой заголовочный файл:
#ifndef HAVE_STRDUP
# ifdef HAVE__STRDUP
# define strdup _strdup
# else
# define strdup my_strdup
# endif
#endif
Если strdup уже существует на целевой платформе, используется версия libc, если не будет использоваться ваша пользовательская функция my_strdup.
РЕДАКТИРОВАТЬ: Я должен был добавить объяснение, почему это лучше.
Во-первых, компилятор не связан с существованием функции в libc. Например возьмем функцию strlcpy
. Он присутствует во FreeBSD, но не в Linux (glibc), хотя оба используют gcc по умолчанию. Или что произойдет, если кто-то собирается скомпилировать ваш код с помощью clang?
Во-вторых, проверка платформы (я не знаю, существует ли стандартный способ) будет работать только в том случае, если вы явно добавите для каждой платформы, которую хотите поддерживать, правильное условие препроцессора. Итак, если вы освоили компиляцию приложения на OSX и Win32 и хотите скомпилировать его сейчас на Linux, вам придется пройти через все условные выражения препроцессора, чтобы увидеть, работают ли они для Linux. Может быть, вы также хотите поддерживать FreeBSD, OpenBSD и т. Д.? Та же работа снова. С помощью теста в ваших строительных скриптах он может компилироваться без какой-либо дополнительной работы.