Распечатайте текущий символ новой строки awk

я не могу сказать, что понимаю то, что "статически соединенную динамическую библиотеку", и при этом я не знаю, что-либо о подписях, содержавшихся в библиотеках (звучит интересным хотя: это означает, что компоновщик может проверить на несоответствия типов в аргументах и типах возврата во время ссылки? ELF определенно не имеет такой функции.), таким образом, этот ответ не будет со сравнительной точки зрения. Кроме того, поскольку ваш вопрос очень широк, ответ будет поверхностным подробно.

Да, можно создать любого статическая библиотека ( .a) или общая библиотека ( .so). Когда компоновщик будет искать библиотеки, которые запрошенный с -l, он предпочтет общую библиотеку, если оба будут существовать, если не переопределено с опцией как - статичный .

При создании библиотеки из исходного кода, единственные потребности создать его как статическую библиотеку ( .a) или как общая библиотека ( .so), не оба. Однако, сценарии сборки довольно многих пакетов настраиваются для создания обеих версий (который требует компиляции дважды, однажды с позицией независимый код и однажды без), чтобы дать потребителям библиотеки выбор который соединиться с.

необходимые части статической библиотеки полностью включены в двоичный файл, который создается. Нет никакой потребности иметь файл .a , доступный во время выполнения. Напротив, общая библиотека, которая была соединена с двоичным файлом, должна быть доступной во время выполнения, хотя динамический компоновщик во время выполнения будет обычно искать ее под измененным именем, его "soname" (обычно libsomething.so во время ссылки и libsomething.so. <целое число> во время выполнения), который является функцией, которая позволяет нескольким различным версиям библиотеки с немного отличающимися API быть установленными в системе одновременно.

В вашем вопросе вы упоминаете также явно, что загрузили динамические библиотеки во время выполнения. Это часто делается для модульных приложений или приложений с плагинами. В этом случае рассматриваемая библиотека (часто названный "модулем" или "плагином") не соединена с приложением вообще, и компоновщик времени изготовления не знает ничего из него. Вместо этого разработчик приложений должен написать код, чтобы вызвать динамического компоновщика во время выполнения и попросить, чтобы это открыло библиотеку именем файла или полным путем. Иногда названия модулей для открытия перечисляются в конфигурационном файле приложения, или существует некоторая другая часть прикладной логики, которая решает, который модули или не необходимы.

0
26.03.2015, 15:23
2 ответа

Вы бы не использовали awk для этого, а скорее od (восьмеричный дамп)

Например, вот простой текстовый файл, созданный на системе Linux с VI:

lizard:~tmp$ cat foo
This is a sentence.

Вот Выход OD:

lizard:~tmp$ od -a foo
0000000   T   h   i   s  sp   i   s  sp   a  sp   s   e   n   t   e   n
0000020   c   e   .  nl  nl
0000025

Обратите внимание, что этот файл содержит пустую строку ниже предложения, так как есть два NL (новая строка = Line Feed = \ N). «СП» представляет собой пространственный символ. Если я бросил аналогичный файл, созданный в системе Windows, это, вероятно, выглядит так:

lizard:~tmp$ od -a foo-dos
0000000   T   h   i   s  sp   i   s  sp   a  sp   s   e   n   t   e   n
0000020   c   e   .  cr  nl  cr  nl
0000027

Это точно тот же файл, но созданный в системе Windows. DOS / Windows Файлы US \ R \ N (канал возврата перевозок) для окончания линейных линий текстовых файлов.

1
28.01.2020, 02:36

Вы можете осмотреть его, например:

awk 'BEGIN { printf "%s", ORS }' | od -c
1
28.01.2020, 02:36

Теги

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