сортирует -k1,2 эквивалентно сортировать -k1,1 -k2,2?

Причина

Похоже, что параметр '-pie' прерывает компиляцию Sniper. Я попытался добавить его на свой домашний компьютер, и он не прошел с той же ошибкой. Удаление его из строки кластера и компоновщик завершается успешно.

Как упомянул пользователь siblenx, OpenSUSE (по крайней мере, тот, что находится в кластере) заставляет исполняемые файлы использовать PIE при связывании, в то время как Linux Mint этого не делает.


Решение

Простое добавление -fno-pie к вызову компоновщика $ (TARGET) в файле standalone / Makefile отменяет COLLECT_GCC_OPTIONS -pie и вроде все работает правильно.

ldd pin_sim.so по-прежнему не работает, но это совсем другая проблема. На самом деле, я мог бы задать отдельный вопрос по этому поводу.

1
19.07.2018, 19:23
1 ответ

-k1,2 означает «сортировать все строки, сравнивая одновременно содержимое всех полей с 1 по 2»; поэтому «1,0 1» сравнивается с «10 2» и т. д.

-k1,1 -k2,2означает «сортировать все строки, сравнивая содержимое поля 1, а когда две строки имеют одинаковое содержимое в поле 1, сравнивая содержимое поля 2»; поэтому «1,0» сравнивается с «10», затем «2» с «4» и т. д.

То, что происходит затем, в обоих случаях сводится к сопоставлению, в частности к взвешиванию. Цифры обычно имеют больший вес, чем знаки препинания и пробелы. При сравнении «1,0 1» и «10 2» разница из-за запятой игнорируется, потому что цифры разные. При сравнении «1,0» и «10» единственная разница — это запятая, поэтому она больше не игнорируется. Подробнее см. ISO 14651 .

Вы можете установить LC_COLLATE=Cдля сопоставления только на основе значений символов без веса. Оба ваших примера приводят к

1,0 1
1,0 3
10 2
10 4

при использовании языкового стандарта «C».

2
27.01.2020, 23:31

Теги

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