2016-08-17 4 views
0

Ich habe immer noch Probleme mit einem laufenden Projekt, das nur nicht kompilieren wird. Ich habe es auf die Includes beschränkt, kann aber nicht herausfinden, was vor sich geht. Ich habe gelesen, dass ich einen WinMain Einstiegspunkt hinzufügen muss, aber das summiert sich nicht - ich habe Klassenkameraden, die diesen Scheißfehler überhaupt nicht getroffen haben. Also habe ich ein neues leeres Projekt erstellt:Einfaches Projekt wird nicht kompiliert

#include <cstdlib> //include c library 

    //using namespace std; 
    //using namespace cv; 

    namespace sp { 
    int main() { 
     return 0; 
    } 
    } 

mit folgenden umfasst:

Unter GCC C++ Compiler beinhaltet:

C:\Users\Amit\Desktop\opencv\build\include 
    C:\opencv_contrib-3.0.0\modules\xfeatures2d\include 

Unter MinGW C++ Linker Bibliotheken:

libopencv_core310 
    libopencv_imgcodecs310 
    libopencv_imgproc310 
    libopencv_xfeatures2d310 
    libopencv_features2d310 
    libopencv_highgui310 

Unter MinGW C++ Linker Bibliothek Suchpfad:

C:\Users\Amit\Desktop\opencv\build\x86\mingw\lib 

Dennoch, ohne von diesen Bibliotheken jede Funktion aufrufen, ich diesen Fehler:

09:45:43 **** Incremental Build of configuration Debug for project testing **** 
    Info: Internal Builder is used for build 
    g++ "-IC:\\opencv_contrib-3.0.0\\modules\\xfeatures2d\\include" "-IC:\\Users\\Amit\\Desktop\\opencv\\build\\include" -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\testing.o" "..\\src\\testing.cpp" 
    g++ "-LC:\\Users\\Amit\\Desktop\\opencv\\build\\x86\\mingw\\lib" -o testing.exe "src\\testing.o" -llibopencv_core310 -llibopencv_imgcodecs310 -llibopencv_imgproc310 -llibopencv_xfeatures2d310 -llibopencv_features2d310 -llibopencv_highgui310 
    c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../libmingw32.a(main.o):(.text.startup+0xa7): undefined reference to `[email protected]' 
    collect2.exe: error: ld returned 1 exit status 

    09:45:43 Build Finished (took 396ms) 

Kann mir jemand retten?

Danke, Amit.

+1

Wo definieren Sie den Einstiegspunkt: * global * (nicht im Namespace) 'main()' -Funktion oder 'WinMain' -Funktion? – MikeCAT

+6

'main()' muss sich im globalen Namespace befinden. –

+0

Main kann nicht in einem Namespace sein, da es global sein muss (damit das Betriebssystem es aufruft). – Wernerson

Antwort

2

Wenn Sie eine ausführbare Datei erstellen, erwartet der Linker eine Funktion namens main im globalen Namespace. Sie haben die Funktion in einem Namespace anstelle des globalen Namespace platziert, sodass der Linker sie nicht findet.

Also entweder bewegen Sie main außerhalb des sp Namespace oder den Linker sagen, wo die Funktion (zumindest die mit MS-Linker möglich, aber nicht sicher, wie es mit g geschieht ++) ist.

2
namespace sp { 
    int main() { 
     return 0; 
    } 
} 

erklärt eine sp::main Funktion, nicht main. Dies lässt Sie ohne eine main Funktion als den Programmeinstiegspunkt dienen.

Lösung: Entfernen Sie Haupt aus dem Namespace sp.

Verwandte Themen