Где хранятся статические библиотеки, используемые gcc или g++, и как они идентифицируются?

Это не идеально, но будет работать во многих системах. Обратите внимание, что подход pgrepнеоптимален, поскольку имя может немного отличаться, или вы можете передать имя, являющееся подстрокой другого имени, но это только начало.

#!/usr/bin/sh

if systemctl is-active --quiet "$1"  > /dev/null 2>&1; then
  echo "Running! (systemctl)"
elif service "$1" status  2>&1 | grep -Eq 'is running|: active (running)'; then
  echo "Running! (service)"
elif pgrep "$1" > /dev/null 2>&1 ; then
  echo "Running (pgrep)"
else
  echo "Not running"
fi

Сохраните это как checkIfRunningи запустите так:

checkIfRunning mongod
1
23.06.2019, 03:24
1 ответ

В системах, производных от Debian -, таких как Ubuntu, статические библиотеки, поставляемые с системой (, установленные apt/ dpkg, а не вручную ), обычно входят в /usr/lib/<target-triplet>/и имеют суффикс .a.

Пример на моей системе x86 -64 Debian:

$ ls /usr/lib/x86_64-linux-gnu/*.a
/usr/lib/x86_64-linux-gnu/libBrokenLocale.a
/usr/lib/x86_64-linux-gnu/libFS.a
/usr/lib/x86_64-linux-gnu/libGLU.a
/usr/lib/x86_64-linux-gnu/libICE.a
/usr/lib/x86_64-linux-gnu/libImlib2.a
...

apt-get install <package>-devобычно устанавливает такие библиотеки в дополнение к динамическим *.so.

Однако существуют пакеты, которые устанавливают свои библиотеки непосредственно в /usr/lib, например. libgraphicsmagick1 -dev .

Компиляторы, такие как gccи clang, также будут устанавливать некоторые «внутренние» библиотеки(libstdc++и т. д. )в /usr/lib/<compiler-name>/..., например:

/usr/lib/gcc/x86_64-linux-gnu/6.3.0/libgcc.a

Другие дистрибутивы могут следовать другим соглашениям; например, в rhel/centos все библиотеки разработки относятся к /usr/lib64/или /usr/lib32/и предоставляются <package>-devel-*. При компиляции файла с gcc -vвы всегда узнаете, где именно компилятор ищет библиотеки, будь то статические или динамические.

1
27.01.2020, 23:41

Теги

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