Einbindung von C++ Library - Build läuft nicht

Alles was mit C/C++ unter NetBeans zu tun hat

Moderator: wegus

Antworten
Size
Beiträge: 30
Registriert: 08.05.2009, 23:04

Einbindung von C++ Library - Build läuft nicht

Beitrag von Size » 15.12.2011, 20:58

Liebe Co-Bastler,

da ich generell immer in Java programmiert habe und nun zu C++ übergehe habe ich noch wenig Möglichkeiten mir selber zu helfen.

Ich binde in einem Application Project (C++) die GNU Scientific Library ein. Ich benutze einen Mac mit Os X Lion sowie XCode. Das built der gsl library hat gut funktioniert und ich sehe auch in meinem Projekt keine Fehler, wenn ich bspw. einen include dieser library nutze.

Wenn ich allerdings einen clean und build laufen lasse, dann kommt immer wieder folgende Fehlermeldung:

Code: Alles auswählen

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .clean-conf
rm -f -r build/Debug
rm -f dist/Debug/GNU-MacOSX/cppapplication_1


CLEAN SUCCESSFUL (total time: 58ms)

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/cppapplication_1
mkdir -p build/Debug/GNU-MacOSX
rm -f build/Debug/GNU-MacOSX/main.o.d
g++    -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/main.o.d -o build/Debug/GNU-MacOSX/main.o main.cpp
mkdir -p build/Debug/GNU-MacOSX
rm -f build/Debug/GNU-MacOSX/newClass.o.d
g++    -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/newClass.o.d -o build/Debug/GNU-MacOSX/newClass.o newClass.cpp
mkdir -p dist/Debug/GNU-MacOSX
g++     -o dist/Debug/GNU-MacOSX/cppapplication_1 build/Debug/GNU-MacOSX/main.o build/Debug/GNU-MacOSX/newClass.o  
Undefined symbols for architecture x86_64:
  "_gsl_rng_mt19937", referenced from:
      newClass::generateTradeIndicator(int)   in newClass.o
  "_gsl_rng_alloc", referenced from:
      newClass::generateTradeIndicator(int)   in newClass.o
  "_gsl_rng_uniform_int", referenced from:
      newClass::generateTradeIndicator(int)   in newClass.o
  "_gsl_rng_free", referenced from:
      newClass::generateTradeIndicator(int)   in newClass.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-MacOSX/cppapplication_1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2


BUILD FAILED (exit value 2, total time: 567ms)
Ich weiss leider zu wenig über die Einbindung von Libraries in C++, habe allerdings bereits in den Preferences unter "Code Assistance" nachgeschaut für C:
Screen Shot 2011-12-15 at 9.51.33 PM.png
Code Assistance C
Screen Shot 2011-12-15 at 9.51.33 PM.png (117.17 KiB) 4721 mal betrachtet
und C++
Screen Shot 2011-12-15 at 9.54.21 PM.png
Code Assistance C++
Screen Shot 2011-12-15 at 9.54.21 PM.png (115.04 KiB) 4721 mal betrachtet
Hat hier irgend jemand eine Idee was der Fehler sein wird?

Gruss

Simon

Size
Beiträge: 30
Registriert: 08.05.2009, 23:04

Re: Einbindung von C++ Library - Build läuft nicht

Beitrag von Size » 16.12.2011, 16:40

Hat keiner eine Idee? Noch nicht mal wie ich weiter vorgehen sollte, was ich testen sollte oder dergleichen?


Was bedeutet eigentlich der Schlüssel vor den Pfaden in den C++ Include Direktories?

Lieben Dank Euch


Gruss

Simon

Size
Beiträge: 30
Registriert: 08.05.2009, 23:04

Re: Einbindung von C++ Library - Build läuft nicht

Beitrag von Size » 16.12.2011, 17:16

Okay,

ich habe es gelöst:

Wenn ich die Option "-c" nutzte (gcc) dann lief er durch:

Code: Alles auswählen

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .clean-conf
rm -f -r build/Debug
rm -f dist/Debug/GNU-MacOSX/cppapplication_1


CLEAN SUCCESSFUL (total time: 58ms)

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/cppapplication_1
mkdir -p build/Debug/GNU-MacOSX
rm -f build/Debug/GNU-MacOSX/main.o.d
g++ -Wall -c   -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/main.o.d -o build/Debug/GNU-MacOSX/main.o main.cpp
mkdir -p build/Debug/GNU-MacOSX
rm -f build/Debug/GNU-MacOSX/newClass.o.d
g++ -Wall -c   -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/newClass.o.d -o build/Debug/GNU-MacOSX/newClass.o newClass.cpp
mkdir -p dist/Debug/GNU-MacOSX
g++ -Wall -c    -o dist/Debug/GNU-MacOSX/cppapplication_1 build/Debug/GNU-MacOSX/main.o build/Debug/GNU-MacOSX/newClass.o  
i686-apple-darwin11-llvm-g++-4.2: build/Debug/GNU-MacOSX/main.o: linker input file unused because linking not done
i686-apple-darwin11-llvm-g++-4.2: build/Debug/GNU-MacOSX/newClass.o: linker input file unused because linking not done


BUILD SUCCESSFUL (total time: 564ms)
Das sprach schonmal dafür, dass der Fehler oben wohl beim Linken passierte. Dann bin ich in die Project Properties gegangen und habe unter Linker die Bibliothek gsllib.a eingebunden. Dann lief alles.

Es ist schön dass es nun läuft. Da ich aber sehr wissbegierig bin, interessiert es mich jetzt doch sehr, warum man über den Linker die Bibliothek gsllib.a nochmal einbinden muss, wenn per Precompiler schon das

Code: Alles auswählen

include<gsl/gsl_rng.h>
erfolgreich eingebunden wird?!?

BG

Simon

Antworten