Напишу, на чём остановились по итогу.
Во-первых:
K>Как один из вариантов смотрел на такой "велосипед":
K>K>#if DL_MYSQL
K>#define mysql_init (*xmysql_init)
K>... // другие подобные строки для других нужных функций
K>#include "mysql.h"
K>...
K>
оказался не очень хорош. Во-первых — нужно чтобы хедер был только в одной единице трансляции. Иначе получаются множественные определения. Ради этого уже приходится делать довольно много подготовительной работы.
Во-вторых, posgresql с его немудрёными extern int FooFunction(...) в хедере тут же полностью нокаутировал "велосипед". Покуда когда extern int (*xFoofunction)(...), конечно, позволяет пользоваться xFooFunction в коде, но вот саму переменную, увы, уже не определяет.
Однако благодаря ссылке на Boost.Typeof (спасибо Alexander G!) я посмотрел, как сделано там и раскопал специфичное (для целевой платформы) расширение компилятора.
#if DL_UNIXODBC
#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) || defined(__GNUC__)
// use non-standard compiler extension __typeof__
// it allow to declare pointer to the function without using it's declaration
typedef __typeof__ ( SQLFreeHandle ) *xSQLFreeHandle;
typedef __typeof__ ( SQLDisconnect ) *xSQLDisconnect;
... ещё куча объявлений
#else // compilers which are not known about __typeof__ support
// declarations below are directly copy-pasted from sql.h and sqlext.h,
// and then (*x...) is placed around the function names.
// In mostly cases this code will not be used, and the declarations
// from previous block will be used instead.
#warning Be sure that the unixodbc function signatures are the same \
as in sql.h and sqlext.h Correct the code below if this is not so.
typedef SQLRETURN SQL_API (*xSQLFreeHandle)(SQLSMALLINT HandleType, SQLHANDLE Handle) //NOLINT
typedef SQLRETURN SQL_API (*xSQLDisconnect)(SQLHDBC ConnectionHandle); //NOLINT
... ещё куча копипастов
#endif
#endif
Рассчёт на то, что макросы DL_ в результате работы configure-скрипта будут в ходу только на *nix системах, где практически везде gcc, который поддерживает __typeof__