Фатальная ошибка - Нет такого файла или каталога
Я установил библиотеку CD с командой ./build.sh -b 64 -z '-std=c++0x' -l '-L /usr/lib/x86_64-linux-gnu' --with-boost /usr/include/boost --amd64-use-128bit
в build
папка.
После того, как я попытался скомпилировать пример init.cpp
из src
папку, я набрал это в терминале: g++ init.cpp -o init
, а терминал показал: fatal error: cds/init.h: No such file or directory
,
Что я должен сделать для команды компиляции в этом случае? Благодарю.
1 ответ
Для общего устранения неполадок в подобных случаях я бы порекомендовал выяснить, где в системе был установлен файл (если ваш build.sh действительно установил файл). Вы сможете найти отсутствующий заголовочный файл, используя
find / -path '*/cds/init.h' 2>/dev/null
Затем вам нужно указать два параметра для g++:
Первым делом компилятор узнает о включаемых файлах из каталога установки
-I path_to_folder_one_step_above_cds_folder
Во-вторых, компоновщик узнает о расположении библиотек. Если файл библиотеки называется libcds.so, вы можете найти его, запустив
find / -name libcds.so 2>/dev/null
Таким образом, для связи, вы поставите флаг
-L path_to_folder_one_step_above_libcds.so
В вашем случае вам может не понадобиться флаг -L, так как большая часть вашей библиотеки предположительно является только заголовком.
ОБНОВЛЕНИЕ: скрипт build.sh выводит важную информацию вверху, начиная с "Сборка со следующими параметрами:". Важными битами будут "Параметры компиляции" и "Параметры ссылки:". Этого должно быть достаточно, чтобы решить ваш конкретный вариант.
UPDATE2: build.sh также экспортирует некоторые флаги, которые могут включать дополнительные параметры. Вы можете распечатать их сразу после запуска build.sh, запустив
echo LDFLAGS=$LDFLAGS
echo CFLAGS=$CFLAGS
echo CXXFLAGS=$CXXFLAGS
вам, вероятно, понадобится передать все эти опции в g ++ при компиляции и компоновке этой библиотеки. LDFLAGS относятся только к компоновщику. Оба других необходимы для компиляции файлов C++.