Не указан путь поиска включаемых файлов
Я предполагаю, что ваш путь включения включает каталог включения VC (в программных файлах). Однако при установке ВК вы выбрали родные файлы?
Привет, Дэвид, это то, что у меня есть в моем пути включения: Program files (x86)> Microsoft Visual Studio 10.0> VC> include> srv.h
Поэтому, когда мы обычно кодируем на C/C++, обычный стандарт, которому нужно следовать, - не писать «используя пространство имен XXX», чтобы избежать путаницы, когда кто-то отлаживает код. Вместо этого мы напрямую используем имя пространства имен и вызываем его библиотечную функцию. например std::cout, std::cin, std::vector и т. д.
Использование *.h для любого заголовочного файла рекомендуется только для внешних библиотек стандартного C++, поэтому, если вы включаете стандартную библиотеку C/C++, избегайте использования ".h" в качестве суффикса.
Открытие всего пространства имен и, кроме того, включение стандартного заголовка звучит как беспорядок. Я бы проверил другие ответы.
Некоторые вещи, которые вы должны проверить:
Проверьте включаемую папку в вашей версии VS (в " C:\Program Files\Microsoft Visual Studio xx.x\VC\include " проверьте файл, который вы включаете, iostream , убедитесь, что он есть).
Проверьте свои проекты Включить каталоги в
> Свойства > Свойства конфигурации > Каталоги VC++ > Включить Каталоги – (это должно выглядеть так: $(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; )
Убедитесь, что вы выбрали правильный проект для этого кода ( File > New > Project > Visual C++ > Win32 Console Application )
Убедитесь, что в ваших файлах кода нет , VS не поддерживает это (в том же проекте проверьте другие файлы кода, файлы .cpp и .h и удалить).
Убедитесь, что у вас не более одной функции main() в вашем файлы кода проекта (в том же проекте проверьте другие файлы кода, файлы .cpp и .h на наличие main() функции и удалите ее или замените другим именем ).
Некоторые вещи, которые вы могли бы попробовать использовать:
- Исключите using namespace std; из функции main() и поместите ее после директивы include.
- Используйте std::cout без using namespace std; .
@ Secko: что мне проверить в этих строках: проверьте папку include в вашей версии VS. Проверьте свои проекты. Включите каталоги в > Свойства > Свойства конфигурации > Каталоги VC++ > Включить каталоги. Убедитесь, что вы выбрали правильный проект для этого кода (консольное приложение). Убедитесь, что у вас нет нигде. в ваших файлах кода (VS этого не поддерживает). Убедитесь, что в ваших файлах кода проекта нет более одной функции main(). я действительно новичок
Вышеупомянутое сработало для меня. Ниже не было:
Это также не удалось:
(Для всех проходящих) Если это произойдет с вами, отключите предварительно скомпилированные заголовки.
Скорее всего, вам не хватает $(IncludePath) в свойствах->Каталоги VC++->Включить каталоги. Добавление этого должно сделать iostream и другие снова видимыми. Вероятно, вы удалили его по ошибке при настройке программы.
Возможно, ваш компилятор и ресурсы, установленные вокруг него, были как-то неполными. Я рекомендую переустановить ваш компилятор: после этого он должен работать.
Я пробовал несколько раз. Тот же результат. Я рассматриваю возможность использования другого компилятора. Пожалуйста, не могли бы вы предложить кого-нибудь?
Если ваши включаемые каталоги правильно указаны в листе свойств проекта VC++ -> Свойства конфигурации -> Каталоги VC++ -> Включить каталоги. Путь указан в макросе $(VC_IncludePath). В моем VS 2015 это оценивается как: "C:\Program Файлы (x86)\Microsoft Visual Studio 14.0\VC\include"
Это сделало это для меня.
Вот консольный проект C++ win32!
Теперь вот консольный проект c++ CLR!
Другие вещи, которые вы узнаете из отладки, чтобы добавить во избежание ошибок
Убедитесь, что у вас есть Desktop Development with C++ installed. У меня возникла та же проблема, потому что у меня была установлена только универсальная разработка платформы Windows.
Быстрое исправление для небольших программ:
В моем случае мой VS2015 установлен без выбора C++ package , а VS2017 установлен с C++ package . Если я использую VS2015 , открытый проект C++ покажет эту ошибку, а использование VS2017 не будет ошибкой.
Если вы создали переменную среды с именем IncludePath, попробуйте переименовать ее в другое.
Это имя переопределит $(IncludePath) в свойствах проекта.
У меня тоже была эта проблема, и я использовал этот код (до main();) в vs 2022, и все получилось:
Я получил эту ошибку, когда создал «Пустое» консольное приложение в Visual Studio 2015. Я заново создал приложение, оставив флажок «Пустой» не отмеченным, он добавил все необходимые библиотеки.
Компилятор создает ошибку C1083, когда не удается найти требуемый файл. Эта ошибка имеет несколько возможных причин. Наиболее распространенными причинами являются неверный путь поиска include или отсутствующие или неправильно именованные файлы заголовков, но другие типы файлов и проблемы могут также вызвать C1083. Ниже приведены некоторые распространенные причины, по которым компилятор создает эту ошибку.
Файл не включен в путь поиска включаемых файлов
Это указывает компилятору искать файл в том же каталоге, который содержит исходный файл, а затем искать в других местах, заданных средой сборки. Если кавычки содержат абсолютный путь, компилятор выполняет поиск файла только в этом расположении. Если кавычки содержат относительный путь, компилятор выполняет поиск файла в каталоге относительно исходного каталога.
Если имя заключено в угловые скобки,
Если включаемые файлы находятся в другом каталоге относительно исходного каталога и в директивах Include используется относительный путь, то вместо угловых скобок следует использовать двойные кавычки. Например, если файл myheader.h заголовка находится в подкаталоге именованных заголовков проекта, в этом примере не удается найти файл и вызывается C1083:
но этот пример работает:
Не задана среда командной строки INCLUDE или LIB
Если компилятор вызывается из командной строки, для указания путей поиска часто используются переменные среды. Если путь поиска, описанный в переменной среды include или lib , задан неправильно, может быть сформирована ошибка C1083. Мы настоятельно рекомендуем использовать ярлык командной строки разработчика, чтобы задать базовую среду для сборок с командной строкой. Дополнительные сведения см. в разделе сборка C/C++ в командной строке. Дополнительные сведения об использовании переменных среды см. в разделе инструкции. Использование переменных среды в сборке.
1.4. Каковы пути поиска заголовочных файлов при компиляции программы?
При компиляции конфигурация пути поиска файла заголовка имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)
- (1) Используйте «gcc -I incpath», чтобы указать путь поиска файла заголовка во время компиляции.
- (2) Используйте переменную окружения "C_INCLUDE_PATH", чтобы указать путь поиска файла заголовка во время компиляции.
- (3) Использовать путь поиска заголовка gcc по умолчанию при компиляции.
Описание общих каталогов заголовочных файлов:
/ usr / src / linux / - это путь к исходному коду ядра, а / usr / src / linux / include содержит заголовочный файл ядра, который обычно используется при компиляции модуля.
Путь / usr / include - это в основном заголовочный файл glibc, который используется для компиляции файлов пользовательского режима. Однако / usr / include также содержит папки linux / и asm /, необходимые для заголовочных файлов ядра, но эти две папки в основном используются для совместимости, а / usr все еще используется для заголовочных файлов ядра. / SRC / Linux / включить.
1.2 Каковы пути поиска библиотеки ссылок, когда программа связана?
При связывании конфигурация пути поиска библиотеки имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)
- (1) Используйте «gcc -Llibpath -llibname», чтобы указать путь поиска библиотеки ссылок.
- (2) Используйте переменную среды "LIBRARY_PATH", чтобы указать путь поиска библиотеки ссылок.
- (3) Используйте «SEARCH_DIR» в сценарии подключения ld, чтобы указать путь поиска библиотеки ссылок.
2.2, место поиска библиотеки динамической загрузки во время выполнения
- (1) Используйте «gcc -Wl, -rpath», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения, и жестко закодируйте в ELF-файл параметр «RPATH»:
Используйте файл readelf для просмотра жестко заданного пути поиска библиотеки времени выполнения в файле elf:
- (2) Используйте переменную среды "LD_RUN_PATH", чтобы указать путь поиска библиотеки динамических ссылок во время компиляции, и жестко запишите ее в опцию "RPATH" файла ELF:
- (3) Используйте переменную среды «LD_LIBRARY_PATH», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения:
(4) Используйте файл конфигурации "/etc/ld.so.conf", чтобы указать путь поиска библиотеки динамических ссылок во время выполнения:
(5) Используйте путь поиска по умолчанию "/ lib, / usr / lib" библиотеки динамических ссылок во время выполнения:
Создайте файл .c и файл .h:
Файл находится в проекте, но не в пути поиска включаемых файлов
Чтобы устранить эту проблему, исправьте путь, используемый компилятором для поиска включаемого или импортируемого файла. В новом проекте используются пути поиска include по умолчанию. Может потребоваться изменить путь поиска include, чтобы добавить каталог для проекта. При компиляции в командной строке добавьте путь к переменной среды include или /I параметр компилятора, чтобы указать путь к файлу.
чтобы задать путь к каталогу включения в Visual Studio, откройте диалоговое окно страницы свойств проекта. выберите VC++ каталоги в разделе свойства конфигурации в левой области, а затем измените свойство включаемые каталоги . дополнительные сведения о каталогах для отдельных пользователей и проектов, поиск которых выполняется компилятором в Visual Studio, см. в разделе страница свойств VC++ directories. Дополнительные сведения о параметре компилятора см. в /I разделе /I (дополнительные каталоги включаемых данных).
Возможно, файл заблокирован или используется
Если для изменения или доступа к файлу используется другая программа, файл может быть заблокирован. Попробуйте закрыть файл в другой программе. иногда другая программа может быть Visual Studio сама по себе при использовании параметров параллельной компиляции. Если отключить параметр параллельной сборки, то эта ошибка исчезнет, а это проблема. Эта проблема также может быть вызвана другими системами параллельной сборки. Будьте внимательны при задании зависимостей файлов и проектов, чтобы порядок сборки был правильным. В некоторых случаях рекомендуется создать промежуточный проект для принудительного создания последовательности зависимостей для общего файла, который может быть создан несколькими проектами. Иногда антивирусные программы временно блокируют недавно измененные файлы для проверки. Если возможно, рассмотрите возможность исключения каталогов сборки проекта из антивирусного сканера.
Проблемы с библиотекой сторонних производителей и vcpkg
если вы видите эту ошибку при попытке настроить библиотеку стороннего производителя в рамках сборки, рассмотрите возможность использования vcpkg, диспетчера пакетов C++ для установки и сборки библиотеки. vcpkg поддерживает большой и растущей список библиотек сторонних производителейи задает все свойства конфигурации и зависимости, необходимые для успешной сборки в рамках проекта.
2.1, путь поиска библиотеки при связывании
Скомпилируйте say.c в libsay.so, а затем скомпилируйте libsay.so при компиляции test.c, чтобы проверить путь поиска в библиотеке, когда gcc связан.
- (1) Используйте «gcc -Llibpath -llibname», чтобы указать путь поиска библиотеки ссылок:
(2) Используйте переменную среды "LIBRARY_PATH", чтобы указать путь поиска библиотеки ссылок:
(3) Используйте «SEARCH_DIR» в сценарии подключения ld, чтобы указать путь поиска библиотеки ссылок:
Используйте команду "ld -verbose", чтобы просмотреть параметр SEARCH_DIR в скрипте ссылок gcc по умолчанию. Конечно, вы также можете использовать "ld -Txxx.lds", чтобы указать скрипт связи.
Скопируйте libsay.so в указанный путь SEARCH_DIR и свяжите тест:
Путь поиска для заголовочных файлов и библиотек Linux
Включена неправильная версия имени файла
Указано неверное имя файла
При вводе имени файла допущена ошибка. Например, примененная к объекту директива
может не найти файл, который вы хотели. Большинство файлов заголовков стандартной библиотеки C++ не имеют расширения h. . Чтобы устранить эту проблему, убедитесь, что указано правильное имя файла, как в следующем примере:
1.3 Когда программа работает, каковы пути поиска в библиотеке динамических ссылок?
При связывании конфигурация пути поиска библиотеки имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)
- (1) При компиляции используйте «gcc -Wl, -rpath», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения, и жестко запишите его в опцию «RPATH» файла ELF.
- (2) Переменная среды «LD_RUN_PATH» используется для указания пути поиска библиотеки динамических ссылок во время компиляции, и она жестко задана в опции «RPATH» файла ELF.
- (3) Используйте переменную среды "LD_LIBRARY_PATH", чтобы указать путь поиска библиотеки динамических ссылок во время выполнения.
- (4) Используйте файл конфигурации "/etc/ld.so.conf", чтобы указать путь поиска библиотеки динамических ссылок во время выполнения.
- (5) Используйте путь поиска по умолчанию "/ lib, / usr / lib" библиотеки динамических ссылок во время выполнения.
Пример
В следующем примере создается ошибка C1083, если файл "test.h" заголовка не существует в исходном каталоге или в пути поиска include.
Сведения о том, как создавать проекты C/C++ в интегрированной среде разработки или в командной строке, а также сведения о настройке переменных среды см. в разделе проекты и сборки систем.
I am trying to run a program called minimal.c. When I type at the command line:
I have set all the paths:
I have gone and made sure windows.h is in the directory. I'm setting the path too. It's in C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include .
I have Visual Studio 2005.
I have exhausted all possibilities. Any ideas?
2.3 Каковы пути поиска заголовочных файлов при компиляции программы?
(1) Используйте «gcc -I incpath», чтобы указать путь поиска файла заголовка во время компиляции:
(2) Используйте переменную окружения "C_INCLUDE_PATH", чтобы указать путь поиска файла заголовка во время компиляции:
- (3) Использовать путь поиска заголовка gcc по умолчанию при компиляции:
Метод настройки пути поиска файла заголовка Gcc по умолчанию не уточнен. Но вы можете использовать следующую команду для просмотра:
Как мы все знаем, Путь поиска по умолчанию для динамических библиотек Linux /lib и /usr/lib . После создания динамической библиотеки она обычно копируется в эти две директории. Когда программе требуется динамическая библиотека и динамическая библиотека не загружена в память, система автоматически перейдет к этим двум путям поиска по умолчанию, чтобы найти соответствующий файл динамической библиотеки, а затем загрузит файл в память. Вы можете использовать функции в динамической библиотеке и другие ресурсы в динамической библиотеке. В Linux, в дополнение к пути поиска по умолчанию, путь поиска динамической библиотеки также можно указать следующими тремя способами.
Способ 1: в файле конфигурации /etc/ld.so.conf указывает путь поиска динамической библиотеки.
Вы можете указать путь поиска для динамических библиотек, отредактировав файл конфигурации /etc/ld.so.conf, и каждый файл в этом файле является путем поиска динамических библиотек. После редактирования файла вы должны выполнить команду ldconfig, чтобы изменения вступили в силу. Мы проиллюстрируем этот метод на примере 1.
Мы используем следующую команду для создания динамической библиотеки libpos.so с исходной программой pos_conf.c (см. Программу 1). Подробную информацию о процессе создания см. В статье [1].
Программа 1: pos_conf.c
Затем скомпилируйте main.c (см. Программу 2) с помощью следующей команды для генерации целевой программы поз.
Программа 2: main.c
Затем переместите файлы библиотеки в каталог / root / test / conf / lib.
Наконец, отредактируйте файл конфигурации /etc/ld.so.conf и добавьте в файл строку «/ root / test / conf / lib».
Попробуйте программу поз.
./pos: error while loading shared libraries: libpos.so: cannot open shared object file: No such file or directory
Что-то пошло не так, система не нашла динамическую библиотеку libpos.so. Чтобы выяснить, почему после редактирования файла конфигурации /etc/ld.so.conf команда ldconfig не была выполнена, поэтому изменение только сейчас не вступило в силу. Давайте попробуем снова после запуска ldconfig.
Программа успешно работает и выводит правильный результат.
Способ 2: через переменные среды LD_LIBRARY_PATH указывает путь поиска динамической библиотеки (!).
Вы также можете указать путь поиска динамической библиотеки, установив переменную среды LD_LIBRARY_PATH. Если в этой переменной среды указано несколько путей поиска в динамической библиотеке, они разделяются двоеточием ":".
Однако настройка LD_LIBRARY_PATH является глобальной, а чрезмерное использование может повлиять на работу других приложений, поэтому она в основном используется для отладки. (Недостатки LD_LIBRARY_PATH и рекомендации по их использованию см. В разделе «Почему LD_LIBRARY_PATH плохой»). Как правило, рекомендуется использовать параметр -R или -rpath команды gcc, чтобы указать путь поиска библиотеки во время компиляции, а информация о пути библиотеки будет сохранена в исполняемом файле. При запуске он напрямую перейдет по этому пути, чтобы найти библиотеку, чтобы избежать Поиск осуществляется с помощью переменной среды LD_LIBRARY_PATH.
Способ поясняется ниже с помощью примера 2.
Мы используем следующую команду для создания динамической библиотеки libpos.so с исходной программой pos_env.c (см. Программу 3).
Программа 3: pos_env.c
Исполняемый исполняемый файл pos может использовать целевую программу pos, полученную в примере 1, и его не нужно заново компилировать. Поскольку функция pos в pos_conf.c и функция pos в pos_env.c имеют один и тот же прототип и одно и то же имя динамической библиотеки, это похоже на изменение динамической библиотеки pos и ее повторное создание. Это одно из преимуществ использования динамических библиотек.
Затем переместите динамическую библиотеку libpos.so в каталог / root / test / conf / lib.
Мы можем использовать экспорт для установки этой переменной среды. Эта переменная среды действительна во всех командах после установки этой переменной среды.
Но для удобства примера в данной статье используется другой метод для установки переменной среды, который заключается в добавлении параметра переменной среды перед командой. Эта переменная среды действительна только для команды. Когда команда выполнена, переменная среды недопустима. Например, следующая команда:
Программа pos запускается успешно, и выводится результат «/ root / test / env / lib», который в точности является результатом функции pos в программе pos_env.c. Поэтому динамическая библиотека, которую ищет программа pos, - это /root/test/env/lib/libpos.so.
Метод 3: Укажите динамический путь поиска библиотеки программы при компиляции объектного кода.
Вы также можете указать путь поиска динамической библиотеки программы при компиляции объектного кода. Это параметр через gcc " -Wl,-rpath, "Укажите (как показано в примере 3). Если указано несколько путей поиска в динамической библиотеке, пути разделяются двоеточием": ".
Мы используем следующую команду для создания динамической библиотеки libpos.so с исходной программой pos.c (см. Программу 4).
Программа 4: поз.с
Поскольку при компиляции объектного кода нам нужно указать путь поиска динамической библиотеки исполняемого файла, нам нужно перекомпилировать исходную программу main.c (см. Программу 2) с помощью команды gcc, чтобы сгенерировать исполняемый файл pos.
Попробуйте запустить программу поз снова.
Программа pos успешно работает, и результат точно соответствует функции pos в pos.c. Поэтому динамическая библиотека, которую ищет программа pos, - это ./libpos.so.
Три метода указания пути поиска динамической библиотеки описаны выше, плюс путь поиска динамической библиотеки по умолчанию / lib и / usr / lib, всего пять путей поиска динамической библиотеки, так каков порядок их поиска?
При представлении вышеупомянутых трех методов были созданы динамические библиотеки ./libpos.so, /root/test/env/lib/libpos.so и /root/test/conf/lib/libpos.so соответственно. Мы используем исходную программу pos_lib.c (см. Программу 5) для создания динамической библиотеки /lib/libpos.so и исходную программу pos_usrlib.c (см. Программу 6) для создания динамической библиотеки /usr/lib/libpos.so.
Программа 5: pos_lib.c
Программа 6: pos_usrlib.c
Таким образом, мы получаем пять динамических библиотек libpos.so. Эти динамические библиотеки имеют одно и то же имя, и все они содержат общую функцию pos одного и того же прототипа. Но место хранения отличается, и результат, напечатанный функцией public, отличается. Открытая функция pos в каждой динамической библиотеке выводит место, где хранится динамическая библиотека. Таким образом, мы можем узнать, какую динамическую библиотеку она искала, выполнив исполняемый файл pos в Примере 3, чтобы получить первый порядок поиска динамической библиотеки, затем удалить динамическую библиотеку и затем выполнить программу pos, чтобы получить вторую Путь поиска в динамической библиотеке, а затем удалите вторую найденную динамическую библиотеку, поэтому назад и вперед вы можете получить порядок, в котором Linux ищет динамические библиотеки. Соответствие между выходными результатами программы pos и найденными динамическими библиотеками показано в таблице 1:
Вывод программы | Динамическая библиотека используется | Соответствующий метод определения пути поиска динамической библиотеки |
---|---|---|
./ | ./libpos.so | Динамический путь поиска библиотеки, указанный при компиляции объектного кода |
/root/test/env/lib | /root/test/env/lib/libpos.so | Путь поиска в динамической библиотеке, указанный в переменной среды LD_LIBRARY_PATH |
/root/test/conf/lib | /root/test/conf/lib/libpos.so | Путь поиска динамической библиотеки, указанный в файле конфигурации /etc/ld.so.conf |
/lib | /lib/libpos.so | Путь поиска динамической библиотеки по умолчанию / lib |
/usr/lib | /usr/lib/libpos.so | Путь поиска динамической библиотеки по умолчанию / usr / lib |
Таблица 1: Соответствие между выводом программы pos и динамической библиотекой
Создайте каждую динамическую библиотеку и поместите ее в соответствующий каталог. Тестовая среда готова. Запустите программу pos и установите переменную окружения LD_LIBRARY_PATH в командной строке.
В соответствии с результатом вывода программы pos первый поиск - это путь поиска динамической библиотеки, указанный при компиляции объектного кода. Затем мы удалили динамическую библиотеку ./libpos.so и запустили указанную выше команду, чтобы попробовать.
rm: remove regular file `libpos.so'? y
Согласно выводу программы pos, путь второго поиска в динамической библиотеке указывается переменной среды LD_LIBRARY_PATH. Давайте удалим /root/test/env/lib/libpos.so и запустим указанную выше команду.
rm: remove regular file `/root/test/env/lib/libpos.so'? y
Путь поиска для третьей динамической библиотеки - это путь, указанный в файле конфигурации /etc/ld.so.conf. Удалите динамическую библиотеку /root/test/conf/lib/libpos.so и выполните указанную выше команду.
rm: remove regular file `/root/test/conf/lib/libpos.so'? y
Путь поиска для четвертой динамической библиотеки - это путь поиска по умолчанию / lib. Давайте удалим динамическую библиотеку /lib/libpos.so и запустим указанную выше команду.
rm: remove regular file `/lib/libpos.so'? y
Последний путь поиска в динамической библиотеке - это путь поиска по умолчанию / usr / lib.
Основываясь на приведенных выше результатах, последовательность поиска пути поиска динамической библиотеки:
1. Путь поиска динамической библиотеки, указанный при компиляции кода объекта;
2. Путь поиска в динамической библиотеке, заданный переменной среды LD_LIBRARY_PATH;
3. Путь поиска динамической библиотеки, указанный в файле конфигурации /etc/ld.so.conf;
4. Путь поиска динамической библиотеки по умолчанию / lib;
5. По умолчанию путь поиска динамической библиотеки - / usr / lib.
Дополнительные причины
Вы установили пакет SDK или библиотеку стороннего производителя, но после установки пакета SDK или библиотеки не открывали новое окно командной строки разработчика. Если пакет SDK или библиотека добавляет файлы в путь поиска включаемых файлов, может потребоваться открыть новое окно командной строки разработчика, чтобы получить эти изменения переменных среды.
Файл использует управляемый код, но параметр /clr компилятора не указан. Дополнительные сведения см. в разделе /clr (компиляция среды CLR).
Файл компилируется с использованием другого /analyze параметра компилятора, чем используется для предварительной компиляции заголовков. При предварительной компиляции заголовков для проекта все должны использовать одни и те же /analyze Параметры. дополнительные сведения см. в разделе /analyze (Code Analysis).
файл или каталог был создан подсистема Windows для Linux, учитывается регистр в каждом каталоге, и указанный регистр пути или файла не соответствует регистру пути или файла на диске.
Файл, каталог или диск доступен только для чтения.
Visual Studio или средства командной строки не имеют достаточных разрешений для чтения файла или каталога. это может произойти, например, когда файлы проекта имеют разные права владения, чем процесс, выполняемый Visual Studio или программ командной строки. иногда эту ошибку можно устранить, запустив Visual Studio или командную строку разработчика от имени администратора.
Недостаточно дескрипторов файлов. Закройте часть приложений и повторите компиляцию. Эта ситуация маловероятна в обычных условиях. Однако она может возникать при построении крупных проектов на компьютере с ограниченной физической памятью.
Предкомпилированные заголовки еще не скомпилированы
Если проект настроен для использования предварительно скомпилированных заголовков, необходимо создать соответствующие .pch файлы, чтобы можно было скомпилировать файлы, использующие содержимое заголовка. например, pch.cpp файл ( stdafx.cpp в Visual Studio 2017 и более ранних версий) автоматически создается в каталоге проекта для новых проектов. Сначала необходимо скомпилировать этот файл, чтобы создать предкомпилированные файлы заголовков. В типичном проекте процесса сборки это выполняется автоматически. Дополнительные сведения см. в разделе Создание предкомпилированных файлов заголовков.
1.1 В какую папку устанавливаются библиотечные файлы .so и заголовочные файлы .h при установке glibc, как gcc может правильно найти соответствующие папки?
Когда мы устанавливаем –prefix = / path / при сборке gcc, gcc устанавливается в / path /. По умолчанию gcc будет искать библиотеки в / path / lib / и искать файлы заголовков в / path / include /.
Например, в обычных системах Linux и gcc, и glibc установлены в каталоге / usr /, поэтому исполняемый файл gcc находится в каталоге / usr / bin, а файл библиотеки glibc находится в / usr / lib В этом каталоге файл заголовка glibc находится в каталоге / usr / include.
Разумеется, указанное выше соотношение не является точным и может быть указано вручную при установке gcc и glibc. Вы можете использовать команду "gcc -print-search-dirs" для просмотра пути поиска библиотеки gcc:
Вы можете использовать следующие методы, чтобы изменить путь к библиотеке и файлу заголовка, который gcc ищет по умолчанию:
- (1) Используйте «gcc -nostdlib -Lusrlibpath», чтобы изменить путь поиска библиотеки по умолчанию для gcc, и используйте «gcc -nostdinc -Iusrincpath», чтобы изменить путь поиска заголовка по умолчанию для gcc.
- (2) Используйте «gcc -Wl, -sysroot =», чтобы изменить путь поиска библиотеки по умолчанию для gcc.
- (3) Измените файл спецификации gcc, чтобы настроить любые параметры gcc.
Спецификации - это файлы конфигурации gcc. Этот метод модификации является самым мощным, но он также является самым сложным и рискованным, поскольку файл спецификации gcc неясен и труден для понимания. Пока я не буду изменять его, но сначала я расскажу о существовании этого метода.
Используйте команду "gcc -v", чтобы просмотреть путь к спецификациям gcc:
В некоторых установках gcc используются встроенные спецификации, но нет внешних файлов спецификаций:
Для встроенной спецификации вы можете использовать команду "gcc -dumpspecs" для просмотра содержимого конкретной спецификации:
Вы также можете использовать "gcc -specs =", чтобы указать файл спецификации gcc.
- (4) Передается ли конфигурация gcc по умолчанию командой configure во время сборки?
Используйте команду "gcc -v" для просмотра значения конфигурации gcc. Параметры конфигурации описаны в файле gcc-4.1.0 \ gcc \ doc \ install.texi.
1.5. При настройке кросс-компилятора, каковы конфигурации пути поиска?
При создании кросс-компилятора необходимо обратить внимание на конфигурацию четырех связанных путей: путь файла библиотеки, связанный во время компиляции, путь файла заголовка, используемого во время компиляции, путь двоичного инструмента, используемого во время компиляции, и имя динамического загрузчика, указанного во время компиляции путь.
- (1) Путь к файлу библиотеки, связанному во время компиляции:
Если не указан, это должен быть путь по умолчанию, связанный с путем установки. Если вы хотите указать, вы можете использовать опцию «LIB_PATH» при компиляции ld в binutils:
- (2) Путь к заголовочному файлу, используемому во время компиляции:
- (3) Бинарный путь инструмента, используемый во время компиляции:
Путь двоичного инструмента по умолчанию можно просмотреть с помощью следующей команды:
Используя указанный двоичный инструмент, вы можете использовать опцию "gcc -B":
- (4) Путь и имя динамического загрузчика, указанного во время компиляции:
Путь и имя динамического загрузчика, жестко запрограммированного в elf, указанного в файле спецификации gcc:
Создайте два .c файла:
8 Answers 8
You could also run the vcvars32.bat file from the directory C:\Program Files\Microsoft Visual Studio 8\VC\bin (this is in your path) prior to your cl command.
vcvars32 calls C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat which sets up the required environment for compiling and linking.
The environment variables are INCLUDE , LIB , and PATH .
The compiler looks for header files in the INCLUDE path during compile, and libraries are fetched from the LIB path during link.
i ran vcvars32 as you said and the windows.h is not a problem anymore. i dont understand that if i have the path in environment variables why it didnt work unless i run that. Do i have to run that everytime i open a commandline prior to compiling. it also wants to know where Gl.h is which is included in my path as well but its not finding it. C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl
For me, with Visual Studio 2017,
is the command to use before compiling with cl .
Here is the documentation.
When you started the command line, did you run the included command line shortcut that comes with the Visual Studio setup? This will set the correct environment variables for you so that the compilation will work correctly.
You've added your INCLUDE paths to your PATH environment variable. Use vcvars32.bat as the others have suggested.
In your project folder, open a PowerShell window and run:
Your path variable might be too long. Windows can’t take more than 1023 characters in the PATH environment variable.
I had the same issue getting the
and after running the C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build>vcvars64.bat cmd/batch script would get the
error message. From here, and other posts on that page, I suspected that the Windows 10 SDK package must be installed. After installation and running the vcvars64.bat script from the path mentioned above, the problem was solved.
P.S. As explained here, an alternative to manually finding and running the above cmd/batch script, you may just do + Q and search for Developer Command Prompt for . , in my case it is Developer Command Prompt for VS 2022 .
Читайте также: