Я пытаюсь подключиться к 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 нет ошибок.