Группировать в LINQ

Ваш порядок ссылок неверен. Свяжите библиотеки после кода, который их требует, а не раньше. Например:

gcc -o eigen eigen.c -llapack 
gcc -static -o eigen eigen.c -llapack

Это должно решить проблемы с привязкой.


Чтобы ответить на следующий вопрос, почему это работает, документация GNU ld говорит об этом:

Имеет значение, где в команде вы пишете эту опцию ; компоновщик ищет и обрабатывает библиотеки и объектные файлы в том порядке, в котором они указаны. Таким образом, foo.o -lz bar.o' searches library z 'после файла foo.o, но до bar.o. Если bar.o ссылается на функции в `z ', эти функции могут не загружаться.

........

Обычно файлы, найденные таким образом, являются библиотечными файлами Архивные файлы, чьи члены являются объектными файлами. Компилятор обрабатывает файл архива, просматривая его для членов, которые определяют символы, которые до сих пор ссылались, но не определялись. Но если найденный файл является обычным объектным файлом, он связан обычным способом.

т.е. компоновщик собирается сделать один проход через файл, ищущий неразрешенные символы, и он следует за файлами в том порядке, в котором вы им предоставляете (т. е. «слева направо»). Если вы еще не указали зависимость при чтении файла, компоновщик не сможет удовлетворить зависимость. Каждый объект в списке ссылок анализируется только один раз.

Обратите внимание, что GNU ld может выполнять переупорядочение в случаях, когда обнаружены циклические зависимости при связывании разделяемых библиотек или объектных файлов. Но статические библиотеки только анализируются только для неизвестных символов.

956
задан Failed Scientist 15 August 2017 в 05:59
поделиться

1 ответ

Следующий пример использует метод GroupBy для эхо-сигналов, которые сгруппированы PersonID.

var results = persons.GroupBy(x => x.PersonID)
              .Select(x => (PersonID: x.Key, Cars: x.Select(p => p.car).ToList())
              ).ToList();

Или

 var results = persons.GroupBy(
               person => person.PersonID,
               (key, groupPerson) => (PersonID: key, Cars: groupPerson.Select(x => x.car).ToList()));

Или

 var results = from person in persons
               group person by person.PersonID into groupPerson
               select (PersonID: groupPerson.Key, Cars: groupPerson.Select(x => x.car).ToList());

Или можно использовать ToLookup, В основном ToLookup использование EqualityComparer<TKey>.Default, чтобы сравнить ключи и сделать то, что необходимо сделать вручную при использовании группы и к словарю. я думаю, что это - excuted inmemory

 ILookup<int, string> results = persons.ToLookup(
            person => person.PersonID,
            person => person.car);
0
ответ дан 19 December 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: