2017-05-29 2 views
0

i alle Klassen von Projekt ausgezogen, die wie folgt drei Fehler links:in Netbeans lib Fehler kurbeln

error_code.hpp:222: undefined reference to `boost::system::generic_category() 

Netbeans IDE
auf Datei geklickt -> Projekteigenschaften -> Linker
neben Bibliotheken, hinzugefügt libboost_system.so

, welche der drei undefinierten Referenz losgeworden boost :: system :: generic_category()

jetzt gibt es:

CLEAN SUCCESSFUL (total time: 123ms) 
cd '/home/michaeleric/NetBeansProjects/NNW' 
/usr/bin/make -f Makefile CONF=Debug 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
make[1]: Entering directory `/home/michaeleric/NetBeansProjects/NNW' 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux/nnw 
make[2]: Entering directory `/home/michaeleric/NetBeansProjects/NNW' 
mkdir -p build/Debug/GNU-Linux/_ext/d028d44d 
rm -f "build/Debug/GNU-Linux/_ext/d028d44d/CGrid.o.d" 
g++ -c -g -MMD -MP -MF "build/Debug/GNU-Linux/_ext/d028d44d/CGrid.o.d" -o build/Debug/GNU-Linux/_ext/d028d44d/CGrid.o ../../Desktop/NN_22_05_17/CGrid.cpp 
mkdir -p dist/Debug/GNU-Linux 
g++  -o dist/Debug/GNU-Linux/nnw build/Debug/GNU-Linux/_ext/d028d44d/CGrid.o -L/usr/include/boost -lboost_system 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function `_start': 
collect2: error: ld returned 1 exit status 
make[2]: *** [dist/Debug/GNU-Linux/nnw] Error 1 
make[2]: Leaving directory `/home/michaeleric/NetBeansProjects/NNW' 
make[1]: *** [.build-conf] Error 2 
make[1]: Leaving directory `/home/michaeleric/NetBeansProjects/NNW' 
make: *** [.build-impl] Error 2 

BUILD FAILED (exit value 2, total time: 6s) 

Was bedeutet dieser Fehler und wie wird er behoben?

Klasse, die Ruhe erfordert

#include </usr/include/boost/thread/thread.hpp> 
#include </usr/include/boost/thread/xtime.hpp> 

#include </usr/include/boost/iostreams/write.hpp> 

#define byte unsigned char 
#define Thread boost::thread 

class CGrid 
{ 

    Thread* GetThread(); 

    bool SetThread(Thread* thread); 

}; 
+0

Ihr Programm hat keine 'main' Funktion. –

+0

danke henri. Ich hätte "wissen" sollen, dass –

+0

Wenn Sie meine Antwort mögen und es hilfreich war, denken Sie bitte an Upvoting (durch Klicken auf die Pfeile neben dem Punktestand) und/oder markieren Sie es als akzeptierte Antwort (durch Klicken auf das Häkchen ✓). –

Antwort

0

Wenn ich das Kompilieren mit

g++ test.cpp -lboost_system 

ich den gleichen Linker-Fehler erhalten, die ist

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start': 
(.text+0x20): undefined reference to `main' 

Allerdings, wenn ich eine leere main hinzufügen Funktion, es kompiliert gut. (I ersetzt auch Ihren hässlichen #define Ersatz mit typedef.)

#include </usr/include/boost/thread/thread.hpp> 
#include </usr/include/boost/thread/xtime.hpp> 

#include </usr/include/boost/iostreams/write.hpp> 

typedef unsigned char byte; 
typedef boost::thread Thread; 

class CGrid 
{ 

    Thread* GetThread(); 

    bool SetThread(Thread* thread); 

}; 

int main() {} 

Wenn damit gemeint ist, eine Objektdatei zu sein und main ist in einer anderen Übersetzungseinheit, kompilieren Sie es als solche mit dem -c Parameter:

g++ -c test.cpp -lboost_system 
+0

Ich habe keine "undefinierte Referenz auf' Main '"Fehler bekommen. Und fragt sich, warum #define hässlich ist? –

+0

@michaeleric Vielleicht haben Sie eine andere Version des Linkers. Zu '# define' siehe [Are typedef und #definiere das gleiche in c?] (Https://stackoverflow.com/questions/1666353/are-typedef-and-define-the-same-in-c) –