Компиляция кода C / C ++ - довольно большая тема c, поэтому я определенно рекомендую вам также прочитать учебник, подобный этому: https://www.geeksforgeeks.org/compiling-with-g-plus-plus/ и https://courses.cs.washington.edu/courses/cse373/99au/unix/g++.html.
Но в любом случае:
Это пример проекта, который использует библиотеку libFoo и включает несколько заголовочных файлов из этой библиотеки:
Myproject:
- Main.cpp
- ClassFoo.cpp
- ClassFoo.hpp
Часть ClassFoo. cpp:
#include "AClassFooHeader.hpp"
ClassFoo::myFunc() {
foo.execute(); // execute a random function in the libFoo library
}
Теперь предположим, что мы хотим скомпилировать этот проект, какую команду нам нужно выполнить?
Итак, первая часть - это компиляция проекта. В основном мы преобразуем исходные файлы в объектные файлы. После этого мы свяжем их вместе в приложении (вместе с библиотекой).
Допустим, мы запустили эту команду:
g++ -c Main.cpp ClassFoo.cpp
Мы получим ошибку включения, например: «не могу найти AClassFooHeader.hpp». Это почему? Что ж, компилятор ищет в некоторых предопределенных местах файлы заголовков, но наша библиотека не находится в предопределенном месте, поэтому он не может найти файл заголовков. Как мы можем решить это?
g++ -I/path/to/lib/folderHeader -c Main.cpp ClassFoo.cpp
Итак, теперь мы включили путь к файлу, чтобы компилятор знал, где найти AClassFooHeader.hpp
Но теперь нам также нужно связать объекты вместе в приложении. Без библиотеки это можно сделать с помощью:
g++ -o application.exe Main.o ClassFoo.o
Поэтому мы связываем файлы .o в приложении (называемом application.exe)
Но теперь нам также нужно связать нашу библиотеку , Это можно сделать с помощью:
g++ -o application.exe Main.o ClassFoo.o -L/path/to/lib/folderLibrary -lFoo
Где -L - это место, где хранится библиотека, а -l - это имя библиотеки минус lib, например, libFoo -> -lFoo
Это также можно сделать за один шаг:
g++ -o application.exe -I/path/to/lib/folderHeader Main.cpp ClassFoo.cpp -L/path/to/lib/folderLibrary -lFoo