У меня есть немного проблемы: Я должен открыть файл компоновщика, который имеет .a
расширение. Я использую Dev-C++.
.a
файлы - это ar
архивы (что-то вроде zip-архивов) файлов объектов ( .o
). Вы можете перечислить файлы в файле .a
с помощью программы ar
:
ar t file.a
и извлечь все файлы:
ar x file.a
Файлы с расширением .a
представляют собой статические библиотеки, использующие соглашения об именах файлов Unix. Они не более чем индексированная коллекция объектного кода. Их не так много открывать (если у вас нет таких инструментов, как nm
или gdb
), оба из которых могут делать разумные вещи с помощью библиотеки. если это не обязательно то, что вам может понадобиться), как скажите компоновщику использовать их при связывании. Для большинства компоновщиков важно размещать все библиотеки (как статические, так и динамические / общие) после основного программного кода в командной строке компоновщика, и порядок библиотек тоже имеет значение.
Вы действительно имеете в виду, что хотите открыть файл, или, скорее, вы хотите связать его со своим кодом?
Dev-C ++ по умолчанию устанавливается вместе с компилятором MinGW / GCC. Если архив не создан специально для работы с MinGW (например, это может быть архив Cygwin или Linux), вы не сможете связать его с кодом, сгенерированным MinGW.
Если архив является библиотекой, совместимой с MinGW / GCC, вы просто связываете его со своим кодом. В Dev-C ++ вам нужно добавить архив в параметры компоновщика проекта, либо добавив полный путь к архиву (для этого есть кнопка в параметрах проекта), либо поместив архив по пути, заданному параметром -L <путь>
параметр, а затем добавьте параметр -l <архив>
. Обратите внимание, что id архива называется libXXX.a, тогда параметр -l
будет иметь значение «-lXXX»; префикс "lib" и расширение ".a" неявны.
Если вы просто хотите проверить архив, чтобы определить, какие внешние символы он предоставляет, то для этого можно использовать утилиту nm . Если вы хотите извлечь отдельные объектные файлы, используйте ar , хотя я не могу придумать веской причины, по которой вы бы захотели это сделать.
Попробуйте fstream или fstream file_op ("c: \\ test.a", ios :: in);
и не забудьте включить fstream.h
.