Загрузка нескольких общих библиотек с различными версиями

Другой способ использования запроса агрегирования применим только для версии MongoDB> 3.4 -

. Благодарим вас за это сообщение .

Примеры документов для выбирается в этом порядке -

var order = [ "David", "Charlie", "Tess" ];

Запрос -

var query = [
             {$match: {name: {$in: order}}},
             {$addFields: {"__order": {$indexOfArray: [order, "$name" ]}}},
             {$sort: {"__order": 1}}
            ];

var result = db.users.aggregate(query);

Еще одна цитата из сообщения, объясняющая эти операторы агрегирования -

Этап «$ addFields» является новым в версии 3.4 и позволяет вам «создавать» новые поля для существующих документов, не зная всех других существующих полей. Новое выражение «$ indexOfArray» возвращает позицию определенного элемента в заданном массиве.

blockquote>

В основном оператор addToSet добавляет новое поле order в каждый документ, когда он его находит, и это Поле order представляет собой первоначальный порядок нашего массива, который мы предоставили. Затем мы просто сортируем документы на основе этого поля.

16
задан Alex B 24 October 2008 в 11:20
поделиться

2 ответа

Вы можете делать некоторые приемы сценария версии:

http://sunsite.ualberta.ca/Documentation/Gnu/binutils-2.9.1/html_node/ld_26.html

Это может потребовать, чтобы Вы записали обертку вокруг своего lib, который вытягивает в libfoo.so.1, который экспортирует некоторые символы явно и маски все другие как локальные. Например:

MYSYMS {глобальный: foo1; foo2; локальный: *;};

и использование это, когда Вы связываете ту обертку как:

gcc - совместно использовал-Wl, - сценарий версии, mysyms.map-o mylib wrapper.o-lfoo-L/path/to/foo.so.1

, Это должно сделать символы libfoo.so.1 локальными для обертки и не доступное основному exe.

7
ответ дан 30 November 2019 в 23:24
поделиться

Я могу только придумать обходное решение. Который должен был бы статически связать версию "системной библиотеки", которую Вы используете. Для Вашей статической сборки Вы могли заставить его связаться против той же старой версии как сторонняя библиотека. Учитывая, что это не полагается на более новую версию...

, Возможно, также возможно избежать этих проблем с не соединением со сторонней библиотекой обычный путь. Вместо этого Ваша программа могла загрузить его во время выполнения. Возможно, затем это могло быть затенено против остальных. Но я не знаю много об этом.

0
ответ дан 30 November 2019 в 23:24
поделиться