Как открыть файл .a - PullRequest
       10

Как открыть файл .a

17 голосов
/ 24 апреля 2010

У меня небольшая проблема: мне нужно открыть файл компоновщика с расширением .a. Я использую Dev-C ++.

Ответы [ 4 ]

22 голосов
/ 24 апреля 2010

.a файлы - это ar архивы (что-то вроде zip-архивов) объектных (.o) файлов. Вы можете перечислить файлы в файле .a, используя программу ar:

ar t file.a

И распаковать все файлы:

ar x file.a
3 голосов
/ 24 апреля 2010

Файлы с расширением .a являются статическими библиотеками, использующими соглашения об именах файлов Unix.Они не намного больше, чем индексированная коллекция объектного кода.Вы не так уж много их открываете (если у вас нет такого инструмента, как nm или gdb, оба из которых могут делать разумные вещи с библиотекой, если не обязательно то, что вы хотите)как скажите компоновщику использовать их при компоновке.Для большинства компоновщиков важно поместить все библиотеки (как статические, так и динамические / общие) после кода вашей основной программы в командной строке компоновщика, и порядок библиотек также имеет значение.

2 голосов
/ 24 апреля 2010

Вы действительно имеете в виду, что вы хотите открыть файл, или, скорее, вы хотите связать его с вашим кодом?

Dev-C ++ по умолчанию устанавливается вместе с компилятором MinGW / GCC. Если архив специально не предназначен для работы с MinGW (например, это может быть архив Cygwin или Linux), вы не сможете связать его с кодом, сгенерированным MinGW.

Если архив является библиотекой, совместимой с MinGW / GCC, то вы просто связываете его со своим кодом. В Dev-C ++ вам нужно добавить архив к опциям компоновщика проекта, либо добавив полный путь к архиву (для этого есть опции в опциях проекта), либо поместив архив по пути, определенному -L<path>, а затем добавив -l<archive> вариант. Обратите внимание, что если архив называется libXXX.a, тогда опция -l<archive> будет `-lXXX '; префикс "lib" и расширение ".a" неявны.

Если вы просто хотите проверить архив, чтобы определить, какие внешние символы он предоставляет, для этого можно использовать утилиту nm . Если вы хотите извлечь отдельные объектные файлы, используйте ar , хотя я не могу придумать вескую причину, по которой вы захотите это сделать.

1 голос
/ 24 апреля 2010

Попробуйте fstream или fstream file_op("c:\\test.a",ios::in);, и не забудьте включить fstream.h.

...