GCC переключатели - что они делают? - PullRequest
2 голосов
/ 29 сентября 2010

Я новичок в использовании gcc, и поэтому у меня есть пара вопросов.

Что выполняют следующие переключатели:

gcc -v -lm -lfftw3 code.c

Я знаю, что lfftw3 - это .h файл, используемый с code.c, но почему он является частью команды?

Я не смог выяснить, что -lm делает в моем поиске.Что он делает?

Мне кажется, я выяснил, -v заставляет gcc отображать вызываемые им программы.

Ответы [ 6 ]

11 голосов
/ 29 сентября 2010

-l указывает библиотеку для включения. В этом случае вы включаете библиотеку математики (-lm) и библиотеку fftw3 (-lffw3). Библиотека будет где-то в пути к вашей библиотеке, возможно, / usr / lib, и будет иметь имя, например, libffw3.so

4 голосов
/ 29 сентября 2010

Со страницы руководства GCC:

-v  Print (on standard error output) the commands executed to run the
           stages of compilation.  Also print the version number of the
           compiler driver program and of the preprocessor and the compiler
           proper.
-l library
           Search the library named library when linking.  (The second
           alternative with the library as a separate argument is only for
           POSIX compliance and is not recommended.)

           It makes a difference where in the command you write this option;
           the linker searches and processes libraries and object files in the
           order they are specified.  Thus, foo.o -lz bar.o searches library z
           after file foo.o but before bar.o.  If bar.o refers to functions in
           z, those functions may not be loaded.

           The linker searches a standard list of directories for the library,
           which is actually a file named liblibrary.a.  The linker then uses
           this file as if it had been specified precisely by name.

           The directories searched include several standard system
           directories plus any that you specify with -L.

           Normally the files found this way are library files---archive files
           whose members are object files.  The linker handles an archive file
           by scanning through it for members which define symbols that have
           so far been referenced but not defined.  But if the file that is
           found is an ordinary object file, it is linked in the usual
           fashion.  The only difference between using an -l option and
           specifying a file name is that -l surrounds library with lib and .a
           and searches several directories.

libm - это библиотека, используемая math.h, поэтому -lm включает эту библиотеку.Возможно, вы захотите лучше понять концепцию linking .По сути, этот ключ добавляет кучу скомпилированного кода в вашу программу.

1 голос
/ 29 сентября 2010

-lm связывает вашу программу с математической библиотекой. -v - это подробный флаг (дополнительный вывод) для компилятора. -lfftw3 связывает вашу программу с библиотекой fftw3.

Вы просто включаете заголовки, используя #include "fftw3.h". Если вы действительно хотите включить код, связанный с ним, вам нужно связать его. -l для этого. Связывание с библиотеками.

0 голосов
/ 29 сентября 2010

В дополнение к man gcc, который должен быть первым пунктом для вопросов по любой команде, вы также можете попробовать почти стандартную опцию --help.Даже для команд, которые его не поддерживают, неподдерживаемый параметр обычно приводит к выводу ошибки, содержащей информацию об использовании, которая должна указывать на подобный параметр.В этом случае gcc отобразит краткую (для gcc длиной всего около 50 строк) справочную сводку, в которой перечислено небольшое количество опций, которые понятны самой программе gcc, а не переданы ее компонентным программам.После описания самой опции --help в нем перечислены --target-help и -v --help как способы получения дополнительной информации о целевой архитектуре и компонентных программах.

Моя установка MinGW GCC 3.4.5 создает больше1200 строк вывода из gcc -v --help в Windows XP.Я почти уверен, что в других установках это не намного меньше.

Также было бы неплохо прочитать официальное руководство для GCC .Также полезно прочитать документацию для компоновщика (ld) и ассемблера (часто gas или просто as, но это может быть также и какой-то специфичный для платформы ассемблер);кроме платформенного ассемблера, они задокументированы как часть коллекции binutils.

Общее знакомство со стилем командной строки инструментов Unix также полезно.Идея о том, что значение односимвольной опции не может быть отделено от имени опции, является соглашением, которое восходит, по сути, к тому, что делает Unix.Современное соглашение (обнародованное GNU) о том, что многосимвольные имена опций вводятся -- вместо просто -, подразумевает, что -lm может быть синонимом -l m (или пары опций -l -m в некоторыхусловности, но это не относится к gcc), но, вероятно, это не единственный параметр с именем -lm.Вы увидите похожий шаблон с параметрами -f, которые управляют определенными оптимизациями, или параметрами -W, которые управляют предупреждениями, например.

0 голосов
/ 29 сентября 2010

Попробуйте man, когда вы пытаетесь узнать о команде.

С man gcc

-v Вывести (при выводе стандартной ошибки) команды, выполненные для запуска этапы компиляции. Также напечатайте номер версии COM- программа драйвера пилера и препроцессора и компилятора правильный.

Как сказал Пабло, -lm связывает вашу математическую библиотеку.

-lfftw3 ссылки в библиотеке, используемой для преобразований Фурье. Страница проекта, с дополнительной информацией, может быть найдена здесь:
http://www.fftw.org/

Суть всех этих операторов в том, что они компилируют ваш файл кода в программу, которая будет называться по умолчанию (a.out) и зависит от вызовов функций из библиотек math и fourier transform. Оператор -v просто помогает вам отслеживать процесс компиляции и диагностировать ошибки.

0 голосов
/ 29 сентября 2010

аргументы, начинающиеся с -l, указывают библиотеку, которая связана с программой. Как сказал Пабло Санта-Крус, -lm - это стандартная математическая библиотека, -lfftw3 - это библиотека для преобразования Фурье.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...