«memcpy» не был объявлен в этой области при использовании компилятора gcc

На самом деле я пытаюсь скомпилировать проект c/c++ с помощью mingw. Этот же проект на самом деле скомпилирован компилятором Visual Studio. Для этого я написал makefile и пока все работает.

Во время компиляции я получаю сообщение об ошибке относительно функций, объявленных с помощью string.h и stdio.h, таких как memcpy() , printf()..., со следующей ошибкой:

error: 'memcpy' was not declared in this scope

Это потому, что компилятор не нашел функции. При компиляции в Visual Studio эта ошибка логически не появлялась, потому что компилятор включает такие пути, как:

c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\

Теперь мой вопрос: что я должен сделать в моем make-файле, чтобы компилятор использовал функции «string.h» и «stdio.h» из файла mingw. Я попытался поместить путь включения в make-файл, например:

 INCLUDE_DIRS =\
 C:\MinGW\include

но это не имеет никакого эффекта. Кроме того, есть разница между string.h и stdio.h из Visual Studio и string.h и stdio.h, используемыми gcc. Может ли это быть проблемой?


person JohnDoe    schedule 19.08.2015    source источник
comment
У вас есть #include <string.h> в исходном файле?   -  person Paul R    schedule 19.08.2015
comment
возможный дубликат memcpy не был объявлен в этой области   -  person Paul R    schedule 19.08.2015
comment
Нет, он не включен в исходный файл. Так вот вопрос, можно ли его принудительно через makefile?   -  person JohnDoe    schedule 19.08.2015
comment
обычно вы должны просто #include все необходимые заголовки, но некоторые компиляторы (например, Visual Studio) все, что вам нужно использовать ленивый подход (stdafx.h) - может быть способ сделать это с помощью gcc (?), но это действительно неправильное решение - просто добавьте необходимые #includes.   -  person Paul R    schedule 19.08.2015


Ответы (1)


Правильным способом было бы добавить эти включения в исходные файлы, где вы используете методы, которые в них определены. Но если вы настаиваете на включении его через make-файл, вы можете использовать force include.

Ссылка на Visual Studio.

Чтобы установить этот параметр компилятора в среде разработки Visual Studio, откройте диалоговое окно «Страницы свойств» проекта.

Откройте страницы свойств проекта.

Щелкните папку C/C++.

Щелкните страницу дополнительных свойств.

Измените свойство «Принудительно включает».

или используйте -include path_to_the_header для gcc

Просто добавьте эту опцию в командную строку компиляции. Удачи.

person Alex Lop.    schedule 20.08.2015