Я пытался установить / скомпилировать драйвер php-firebird для php7.4 на macos, но пока безуспешно.

В репозитории драйверов есть проблема, но с точки зрения помощи не так много. https://github.com/FirebirdSQL/php-firebird/issues/6

Пока я сделал это:

  1. Установлен https://github.com/FirebirdSQL/firebird/releases/download/R2_5_9/FirebirdCS-2.5.9-27139-x86_64.pkg (также пробовал с firebird 3.x)
  2. Клонировал это репо в php-firebird
  3. cd php-firebird
  4. phpize
  5. CPPFLAGS=-I/Library/Frameworks/Firebird.framework/Versions/Current/Headers LDFLAGS=-L/Library/Frameworks/Firebird.framework/Versions/Current/Libraries ./configure
  6. make ... и здесь начинаются ошибки
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:159:24: warning: equality comparison result unused [-Wunused-comparison]
                        ib_result->stmt_res == NULL;
                        ~~~~~~~~~~~~~~~~~~~~^~~~~~~
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:159:24: note: use '=' to turn this equality comparison into an assignment
                        ib_result->stmt_res == NULL;
                                            ^~
                                            =

/Users/bonovski/Sandbox/php-firebird/ibase_query.c:178:22: warning: equality comparison result unused [-Wunused-comparison]
                ib_query->stmt_res == NULL;
                ~~~~~~~~~~~~~~~~~~~^~~~~~~
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:178:22: note: use '=' to turn this equality comparison into an assignment
                ib_query->stmt_res == NULL;
                                   ^~
                                   =
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:253:22: error: use of undeclared identifier 'blr_bool'
                case blr_bool:
                     ^
/Users/bonovskiSandbox/php-firebird/ibase_query.c:254:34: error: use of undeclared identifier 'SQL_BOOLEAN'
                    a->el_type = SQL_BOOLEAN;
                                 ^
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:598:22: error: use of undeclared identifier 'SQL_BOOLEAN'
                case SQL_BOOLEAN:
                     ^
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:724:25: warning: incompatible pointer types passing 'zend_long *' (aka 'long long *') to parameter of type 'const time_t *' (aka 'const long *')
      [-Wincompatible-pointer-types]
                                        res = php_gmtime_r(&Z_LVAL_P(b_var), &t);
                                                           ^~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/time.h:127:46: note: passing argument to parameter here
struct tm *gmtime_r(const time_t * __restrict, struct tm * __restrict);
                                             ^
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:790:18: error: use of undeclared identifier 'SQL_BOOLEAN'
            case SQL_BOOLEAN:
                 ^
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:795:32: error: use of undeclared identifier 'SQL_BOOLEAN'
                var->sqltype = SQL_BOOLEAN;
                               ^
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:883:18: error: use of undeclared identifier 'SQL_BOOLEAN'
            case SQL_BOOLEAN:
                 ^
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:1386:14: error: use of undeclared identifier 'SQL_BOOLEAN'
        case SQL_BOOLEAN:
             ^
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:1985:18: error: use of undeclared identifier 'SQL_BOOLEAN'
            case SQL_BOOLEAN:
                 ^
/Users/bonovski/Sandbox/php-firebird/ibase_query.c:2012:18: error: use of undeclared identifier 'SQL_BOOLEAN'
            case SQL_BOOLEAN:
                 ^
3 warnings and 9 errors generated.
make: *** [ibase_query.lo] Error 1
0
Bonovski 20 Май 2021 в 08:19

1 ответ

Лучший ответ

Ошибки, связанные с логическим типом данных, появившиеся в Firebird 3.0, ясно показывают, что ваша библиотека PHP ожидает Firebird 3+, но вы предоставляете ей исходники FB 2.5 или более ранней версии.

CPPFLAGS=-I/Library/Frameworks/Firebird.framework/Versions/Current/Headers 
LDFLAGS=-L/Library/Frameworks/Firebird.framework/Versions/Current/Libraries 

Я думаю, что после того, как вы установили FB 2.5, Versions/Current, о котором вы упомянули, был создан как символическая ссылка на источники 2.5. Если вы установили исходные коды версии 3.0 - проверьте, на что указывает символическая ссылка Versions/Current, и при необходимости измените ее на источники версии 3.0 (ln -s в Linux, угадайте то же самое в утилитах командной строки BSD)

Быстрая проверка, вероятно, открыла бы ibase.h в этом месте и проверила бы объявление версии API: в моем окне Windows прямо сейчас третья строка без комментариев следующая: #define FB_API_VER 21 в этом файле в папке с Firebird 2.1 .7 установлен.

В качестве альтернативы отрегулируйте CPPFLAGS и LDFLAGS и, возможно, другие переменные, чтобы они указывали на конкретные источники версии 3.x, а не на какие-то неопределенные "по умолчанию" или "текущие".

Эта настройка флагов, конечно, имеет смысл только в том случае, если вам нужны исходные коды FB 2.5, установленные как «текущие» для некоторых других целей вместе с источниками FB 3. Я не знаю, что такое UNIX, но, по крайней мере, в Windows тривиально и иногда удобно иметь несколько установленных / работающих серверов Firebird разных или даже одной и той же версии. Это может случиться и с некоторыми будущими читателями.

2
Arioch 'The 20 Май 2021 в 17:12