Ваш код:
db.accommodations.find({ name : { $size: { $gt : 1 } }})
не работает, потому что это означает: находят имя, где больше, чем каждый - размер
Вместо этого, необходимо было записать:
db.accommodations.find({ name : { $gt: { $size : 1 } }})
, Что означает: находят имя, где размер больше, чем один
Рассматривали ли вы использование autoconf
? Он предназначен для проверки правильности настройки среды сборки.
Автоинструменты, как уже упоминалось, проверяют наличие символов в библиотеках. То, как это происходит, довольно просто. Как вы упомянули в п. 1), autoconf и его результат скрипт configure в основном создают фиктивную программу c и пытаются соединиться с соответствующей библиотекой. Если работает, то библиотека работает, если не работает, очевидно, работать не будет. Autoconf ищет определенные символы / имена функций в библиотеке.
Самый простой способ - вызвать ld
с параметром -l
. Это будет эффективно проверять существование библиотеки, автоматически выполняя поиск в стандартных библиотеках:
$ ld -luuid
ld: warning: cannot find entry symbol _start; not setting start address
$ echo $?
0
$ ld -luuidblah
ld: cannot find -luuidblah
$ echo $?
1
# so...
$ ld -luuid 2>/dev/null && echo "libuuid exists" || echo "libuuid not found"
EDIT
Как указал dreamlax, это не работает для всех вариантов unix. Я не знаю, будет ли это работать на всех unix (я тестировал Linux и OpenBSD), но вы можете попробовать это вместо:
$ echo "int main(){}" | gcc -o /dev/null -x c - -luuid 2>/dev/null
$ echo $?
0
$ echo "int main(){}" | gcc -o /dev/null -x c - -luuidblah 2>/dev/null
$ echo $?
1
Вот что я сделал с помощью autoconf
, который я показываю здесь как убедительный пример для всех, кто может прийти дальше:
Я создал файл configure.ac
, который содержал следующее:
AC_INIT(package, 1.1, email)
AC_CHECK_LIB(uuid, uuid_generate_random, [echo "libuuid exists"], [echo "libuuid missing"])
Затем я выполнил следующие команды по порядку (та же папка, что я создал configure.ac
):
autoconf
./configure
В конце настройки он сплюнул, нашел ли он uuid_generate_random
в библиотеке uuid
. Казалось, работает отлично (хотя, к сожалению, в двух операционных системах отсутствовала библиотека, но это уже совсем другая проблема).
Для всех, кто может найти это постфактум, аргументы AC_INIT
здесь не имеют смысла. и вы можете скопировать их оптом. Аргументы для AC_CHECK_LIB
: имя библиотеки, имя функции в этой библиотеке, что делать в случае успеха, что делать в случае неудачи.
Хотя ответ Мердада был не так полезен, как мне бы хотелось (то есть, чтобы не тратить время на просмотр документации) кажется, это правильный вариант, и я приму его. mhawke: Мне очень понравился ваш ответ, но я не совсем знал, как проверить, чтобы убедиться, что он работает. Казалось, что это было на SunOS, но всегда отказывалось от двух других (AIX, HPUX), и я не мог придумать такую библиотеку, которую я мог бы гарантировать, что она найдется.
Спасибо за помогите ребята.
mhawke: Мне очень понравился ваш ответ, но я не совсем знал, как проверить, чтобы убедиться, что он работает. Казалось, что это было на SunOS, но всегда отказывалось от двух других (AIX, HPUX), и я не мог придумать такую библиотеку, которую я мог бы гарантировать, что она найдется.Спасибо за помогите ребята.
mhawke: Мне очень понравился ваш ответ, но я не совсем знал, как проверить, чтобы убедиться, что он работает. Казалось, что это было на SunOS, но всегда отказывалось от двух других (AIX, HPUX), и я не мог придумать такую библиотеку, которую я мог бы гарантировать, что она найдется.Спасибо за помогите ребята.