#c #header-files #include-path
Вопрос:
Я пытаюсь скомпилировать программу a в Linux, и программа содержит следующие заголовочные файлы:
#include <iostream>
#include <vector>
#include "Minuit2/FCNBase.h"
#include "FunctionMinimum.h"
#include "MnMigrad.h"
и т.д. Исходный файл находится в
home/christian/code
и все заголовочные файлы находятся в
/home/christian/root/include/Minuit2
Я пытаюсь скомпилировать, выполнив следующую команду:
g -I /Minuit2 niminimzationExample.cpp -o niminimzationExample -L/Minuit2/lib -lMinuit2
Но я получаю следующее сообщение об ошибке:
In file included from niminimzationExample.cpp:9:0:
/home/christian/root/include/Minuit2/FCNBase.h:13:10: fatal error: Minuit2/MnConfig.h: No such file or directory
#include "Minuit2/MnConfig.h"
Потому что компилятор не может найти MnConfig.h, который является первым заголовочным файлом внутри FCNBase.h. Я также пытался запустить
g -I /home/christian/root/include/Minuit2 niminimzationExample.cpp -o niminimzationExample -L/Minuit2/lib -lMinuit2
Но я все равно получаю ту же ошибку. Каков способ записи для включения файлов заголовков?
Спасибо.
Комментарии:
1. Вам нужно добавить родительский каталог
#include "Minuit2/FCNBase.h"
в путь включения, как это уже естьMinuit2
в пути включения.2.
/Minuit2
это путь кMinuit2
корневому каталогу (не названный каталогroot
, а корневой каталог файловой системы). Я рекомендую вам использовать полный путь к каталогам. И используйте<>
для своих целей.
Ответ №1:
Если ваш заголовок находится по адресу
/home/christian/root/include/Minuit2/FCNBase.h
Ваш #include
вариант или компиляции неверен.
В настоящее время вы указываете компилятору на поиск
/Minuit2/Minuit2/FCNBase.h
или
/home/christian/root/include/Minuit2/Minuit2/FCNBase.h
Вы должны указать опцию
-I /home/christian/root/include
Чтобы компилятор выполнял поиск Minuit2/FCNBase.h
в каталоге /home/christian/root/include
.
Если вы не хотите менять этот параметр, вам следует изменить #include
на
#include "FCNBase.h"
Чтобы компилятор выполнял поиск FCNBase.h
в каталоге /home/christian/root/include/Minuit2
.