Как объединить несколько статических библиотек, когда имя библиотеки содержит пробел? - PullRequest
2 голосов
/ 03 июля 2019

Я работаю над различными версиями Linux, и мне нужно объединить несколько статических библиотек, таких как

foo1.a
foo bar.a
foo2.a

, в одну статическую библиотеку со списком (обратите внимание, что во втором файле есть пробел в названии).

Я видел статьи, описывающие, как это сделать с помощью скрипта ar mri.Предлагается создать файл с именем combine.ar с таким содержимым, как

CREATE comboLib.a
ADDLIB foo1.a
ADDLIB foo bar.a
ADDLIB foo2.a
VERBOSE
SAVE
END

, а затем использовать команду ar -M < combine.ar.

Однако язык сценариев ar рассматривает пробелы как способчтобы добавить два элемента, он видит вторую строку как add library foo и library bar.a

Я попробовал следующее без удачи

ADDLIB "foo bar.a"
ADDLIB foo\ bar.a
ADDLIB 'foo bar.a'

Как это можно сделать?

1 Ответ

3 голосов
/ 03 июля 2019

Я не знаю, возможно ли использовать имена файлов с пробелом в сценарии MRI.Вы можете переименовать или использовать символическую ссылку на файл библиотеки foo bar.a на имя без пробела в качестве простого обходного пути.

Если вы не настаиваете на использовании сценария MRI, вы можете сделать это с помощью серии команд ar.

В следующем сценарии предполагается, что все библиотечные файлы находятся в одном и том же каталоге, и временный каталог не конфликтует с чем-то другим.

for lib in foo1.a 'foo bar.a' foo2.a
do
  rm -rf tmpdir   # make sure we do not have any existing file
  mkdir tmpdir    # place to extract members
  cd tmpdir
  # x = extract all memebers, o = keep original file date
  ar xo ../"$lib"
  # r = add/replace member, c = create archive without warning
  ar rc ../comboLib.a *
done
rm -rf tmpdir     # clean up

Редактировать: поскольку современные системы не нуждаются ranlib, я удалил модификатор s из команды ar r.

См. https://linux.die.net/man/1/ar

...