2016-02-16 3 views
-4

Я знаю, что есть несколько вопросов вроде этого, нет ответа, который я нашел до сих пор, кажется, решает мою проблему.C++ - нет правила для создания цели SaltPepper.o

Я использую затмение.

Я закодировал что-то в основной функции, и он отлично работал. Я тогда внешняя функция с кодом в главном, и теперь я получаю смешные ошибки.

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 
#include <stdio.h> 
#include <random> 
#include <ctime> 
#include <cstdlib> 

using namespace std; 
using namespace cv; 
void createSaltandPepper(); 

int main(int argc, char** argv) { 

createSaltandPepper(); 
return 0; 

} 

Нет, я пытаюсь не дать обширный пример еще раз, вот вне функции:

void createSaltandPepper() { 
//mycode 
} 

По крайней мере, это, кажется, не орфографическая ошибка.

Однако ошибка:

make all 
make: *** No rule to make target 'SaltPepper.o', needed by 'Display'. 

Я удивляюсь, почему он пытается сделать tagert под названием SaltPepper.o, если моя функция называется createSaltandPepper.

Может кто-нибудь мне помочь?

Редактировать: Я не заведомо создал make-файл, поскольку я сказал, что работаю с eclipse. И снова код работает нормально, пока он находится внутри основной функции, а не внутри createSaltandPepper(). Мой файл называется DisplayImage.cpp, код выше находится в этом файле, включая функцию createSaltandPepper(); Только две функции в этом файле являются основной функцией и createSaltandPepper(); В проекте нет других исходных файлов.

Прошу прощения, если я столкнулся с такой глупостью: я программист на Java и не имею понятия о make-файлах и т. Д.

Смотрите этот скриншот:

myeclipse

теперь я создал новый проект и добавил мой старый файл в него, на этот раз назвав его Display.cpp

«строить все» привела к ошибке в subdir.mk, который гласит:

subdir.mk:18: recipe for target 'Display.o' failed 
make: *** [Display.o] Error 1 

полное сообщение об ошибке для сборки выглядит следующим образом:

make all 
Building file: ../Display.cpp 
Invoking: GCC C++ Compiler 
g++ -O0 -g3 -Wall -c -fmessage-length=0-std=c++11 -MMD -MP -MF"Display.d"  -MT"Display.d" -o"Display.o" "../Display.cpp" 
subdir.mk:18: recipe for target 'Display.o' failed 
g++: error: argument to ‘-fmessage-length=’ should be a non-negative integer 
make: *** [Display.o] Error 1 

Обновление

я перешел на Netbeans. Теперь он работает.

+2

Вы [толкнул это?] (Https://www.youtube.com/watch?v=vCadcBR95oU). Вы должны подтолкнуть его к действию. –

+3

Это не имеет ничего общего с C++. У вас проблемы с вашим файлом. Шаг 1, чтобы научиться разрабатывать с помощью C++: научиться распознавать фактическое сообщение об ошибке C++ от компилятора по сравнению с вашей системой сборки. –

+0

Это повод для вас что-то сделать ... Это сделало bytheway работать отлично, если весь код был в главной функции – user1862770

ответ

2

Во-первых, эта ошибка не имеет ничего общего с компиляторами, это сообщение об ошибке создается системой сборки (make в вашем случае). В принципе, затмение, по-видимому, вызывает make, в котором выясняется, какие зависимости между файлами и какие из них нуждаются в перекомпиляции, и в свою очередь вызывает компилятор для их компиляции. Каждый исходный файл C++ затем скомпилируется в объектный файл .o (обычно с тем же именем: SaltPepper.cpp ->SaltPepper.o). Затем все объектные файлы связаны вместе с библиотеками для формирования окончательного исполняемого файла.

В этом конкретном сообщении об ошибке указано, что ваш исполняемый файл указан в зависимости от объектного файла SaltPepper.o, но система сборки не знает, как его создать. Скорее всего, нет соответствующего файла SaltPepper.cpp. Поэтому проверьте, существует ли такой файл. Если нет, проверьте настройки своего проекта (или Makefile, если вы создали его вручную) и проверьте, правильно ли указаны все имена файлов cpp. Вы должны добавить все файлы cpp с кодом в проект и удалить все посторонние файлы cpp.

Обновление: Обратите внимание, что система сборки работает на уровне файла. Он ничего не знает о функциях и т. Д., Только исходные файлы. Возможно, это источник путаницы.

+0

Благодарим вас - я перешел в настройки project-> properties-> и через все вкладки, но не нашел ничего похожего на то, что он был связан с make-файлом. вы можете мне помочь – user1862770

+1

Makefile, вероятно, автоматически генерируется eclipse. Вы должны убедиться, что список файлов cpp на панели «Проект» верен. –

+1

@ user1862770 Посмотреть скриншот: http://www.ibm.com/developerworks/library/os-eclipse-ganymede/fig4.jpg В левом верхнем углу находится панель «Проводник проекта». Вы должны увидеть все ваши файлы cpp. Если нет, найдите команду «Добавить файл в проект» (или что-то подобное) –

 Смежные вопросы

  • Нет связанных вопросов^_^