Как исправить «ошибку: использование неразрешенного идентификатора» при сборке mongo-swift-driver - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь подключиться к MongoDB из моего приложения Swift (на самом деле используется библиотека Vapor MongoDB , но, похоже, это не является корнем проблемы).Все отлично работает на моем MacBook, но когда я пытаюсь встроить в производство, mongo-swift-driver не удается собрать с использованием нескольких неразрешенных идентификаторов «X».Примечание: вы имели в виду?ошибки.

Я использую Swift 5.0.1 на сервере Ubuntu 18.04 (виртуальная машина, работающая на Heroku).Пакет, который не удалось собрать, называется MongoSwift Я пытался установить его на сервер Ubuntu 16.04, но даже после установки libmongoc его не удалось собрать с libmongoc.h:1:10: error: 'mongoc.h' file not found.Мне интересно, тянет ли она неправильную версию libmongoc-dev и libbson-dev, поэтому библиотека Swift пытается использовать функции, которые были удалены между выпусками.Тем не менее, я не уверен, как определить это или как установить правильную версию, если так.Я думаю, что мой MacBook работает под управлением версии 1.13.0, но он может использовать mongo-c-driver вместо libmongoc, потому что его Mac, а не Ubuntu.

libbson-dev
libmongoc-dev

- это 2 пакета, которые я устанавливаю с помощью apt-get (я сам не запускаю apt-get, потому что не могу изменить виртуальную машину, но я использую этот buildpack для их установки перед сборкой приложения).

Вывод сборкиis

/tmp/build_32195d602f07b06986e284c8bb971238/.apt/usr/include/libbson-1.0/bson-version.h:63:26: error: invalid suffix '.2' on floating constant
#define BSON_VERSION (1.9.2)
                         ^
/tmp/build_32195d602f07b06986e284c8bb971238/.build/checkouts/mongo-swift-driver/Sources/MongoSwift/BSON/Overwritable.swift:68:58: error: use of unresolved identifier 'bson_iter_overwrite_oid'; did you mean 'bson_iter_overwrite_bool'?
            iter.withMutableBSONIterPointer { iterPtr in bson_iter_overwrite_oid(iterPtr, oidPtr) }
                                                         ^~~~~~~~~~~~~~~~~~~~~~~
                                                         bson_iter_overwrite_bool
bson.bson_iter_overwrite_bool:1:13: note: 'bson_iter_overwrite_bool' declared here
public func bson_iter_overwrite_bool(_ iter: OpaquePointer!, _ value: Bool)
            ^
/tmp/build_32195d602f07b06986e284c8bb971238/.build/checkouts/mongo-swift-driver/Sources/MongoSwift/BSON/Overwritable.swift:76:13: error: use of unresolved identifier 'bson_iter_overwrite_timestamp'
            bson_iter_overwrite_timestamp(iterPtr, self.timestamp, self.increment)
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bson.bson_iter_overwrite_int32:1:13: note: did you mean 'bson_iter_overwrite_int32'?
public func bson_iter_overwrite_int32(_ iter: OpaquePointer!, _ value: Int32)
            ^
bson.bson_iter_overwrite_int64:1:13: note: did you mean 'bson_iter_overwrite_int64'?
public func bson_iter_overwrite_int64(_ iter: OpaquePointer!, _ value: Int64)
            ^
/tmp/build_32195d602f07b06986e284c8bb971238/.build/checkouts/mongo-swift-driver/Sources/MongoSwift/BSON/Overwritable.swift:84:13: error: use of unresolved identifier 'bson_iter_overwrite_date_time'; did you mean 'bson_iter_overwrite_double'?
            bson_iter_overwrite_date_time(iterPtr, self.msSinceEpoch)
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            bson_iter_overwrite_double
bson.bson_iter_overwrite_double:1:13: note: 'bson_iter_overwrite_double' declared here
public func bson_iter_overwrite_double(_ iter: OpaquePointer!, _ value: Double)

В частности, функции bson_iter_overwrite_oid, bson_iter_overwrite_timestamp и bson_iter_overwrite_date_time не могут быть найдены.Я проверил свою локальную копию, и эти функции определенно вызываются, но кажется, что они существуют в базовой библиотеке C, поэтому на моем MacBook нет ошибок.

...