Для чего нужен файл libtool .la?

Для чего нужны .la файлы libtool? Как они используются с общим объектом?


person chappar    schedule 06.08.2009    source источник
comment
Также stackoverflow.com/q/12237282/632951   -  person Pacerier    schedule 26.06.2015


Ответы (3)


Это текстовый файл, содержащий описание библиотеки.

Это позволяет libtool создавать независимые от платформы имена.

Например, libfoo относится к:

Под Linux:

/lib/libfoo.so       # Symlink to shared object
/lib/libfoo.so.1     # Symlink to shared object
/lib/libfoo.so.1.0.1 # Shared object
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library

В Cygwin:

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # libtool library
/bin/cygfoo_1.dll    # DLL

Под Windows MinGW:

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library
/bin/foo_1.dll       # DLL

Итак, libfoo.la - единственный файл, который libtool сохраняется между платформами между платформами, позволяющий понять, что происходит с:

  • Библиотечные зависимости
  • Фактические имена файлов
  • Версия и редакция библиотеки

Вне зависимости от конкретной платформы реализации библиотек.

person Artyom    schedule 06.08.2009
comment
Итак, как превратить файл .la в общий файл lib для конкретной платформы, например libfoo.la - ›libfoo.so. * - person theactiveactor; 31.12.2009
comment
Вы не можете, что libfoo.la содержит только метаинформацию, т.е. в libfoo.la (текстовый файл) написано, где вы должны найти libfoo.so.x.y.z - person Artyom; 31.12.2009
comment
Означает ли это, что для создания файла .la мне нужно использовать libtool (например, из automake)? Можно положиться на libtool, чтобы связать объектные файлы (gnu.org /software/libtool/manual/html_node/Using-Automake.html), но если я хочу распространять библиотеку без .la, означает ли это, что будет очень сложно связать ее с помощью Cygwin или mingw? - person dma_k; 01.06.2010
comment
В случае, если кто-то хочет отключить эту версию, вы можете использовать -avoid-version в своем _la_LDFLAGS вместо -version-info - person laishiekai; 09.08.2018
comment
@theactiveactor, поскольку файл .la содержит метаданные, в нем должна быть статическая библиотека. Чтобы найти это, вы можете запустить libtool --mode-link ${whatever_command_you_would_use_for_linking} -lfoo -L${where_libfoo.la_exists}, и он напечатает команду связывания в качестве отладочной информации. В моем случае статические файлы находились в папке .libs /, содержащей файл * .la - person Jenil Mewada; 30.11.2020

Согласно http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files, они нужны для обработки зависимостей. Но использование pkg-config может быть лучшим вариантом:

В идеальном мире каждая статическая библиотека, требующая зависимостей, будет иметь свой собственный файл .pc для pkg-config, и каждый пакет, пытающийся статически связать эту библиотеку, будет использовать pkg-config --static, чтобы получить библиотеки для ссылки.

person Thomas Leonard    schedule 09.02.2012

Я нашел здесь очень хорошее объяснение о файлах .la http://openbooks.sourceforge.net/books/wga/dealing-with-libraries.html.

Резюме (как я понял): поскольку libtool имеет дело со статическими и динамическими библиотеками внутри (через --diable-shared или --disable-static), он создает оболочку для файлов библиотеки, которые он создает. Они рассматриваются как файлы двоичных библиотек в среде, поддерживаемой libtool.

person Rak    schedule 22.08.2012