C++ static lib aus Klasse compilieren.

kle-ben

Erfahrenes Mitglied
Hallo,

ich versuche eine statische Bibliothek aus einer Klasse zu erzeugen und diese dann in meinem Programm zu verwenden.
Ich habe dazu die folgenden Dateien angelegt

main.cpp
Code:
#include "Klasse.h"

int main() {
	
	Klasse k;
	k.make();
	
}

Klasse.h
Code:
#ifndef KLASSE_H
#define KLASSE_H


class Klasse {

public:
	void make();
};

#endif

Klasse.cpp
Code:
#include "Klasse.h"
#include <iostream>

using namespace std;

void Klasse::make() {
	cout << "Hallo Welt" <<endl;
}

Außerdem das folgende script das mir eine Bibliothek binden und zu der main linken soll.

Code:
#!/bin/bash
g++ Klasse.cpp -c
echo "------------------------KLASS COMPILED"
ar rcs libKLib.a Klasse.o
echo "------------------------KLASS BIND TO LIB"
g++ main.cpp -c
echo "------------------------MAIN COMPILED"
g++ -L. -lkLib main.o -o prog
echo "------------------------MAIN LINKED WITH KLASSEN LIB"

Allerdings bekomme ich immer folgende Ausgabe:
------------------------KLASS COMPILED
------------------------KLASS BIND TO LIB
------------------------MAIN COMPILED
main.o: In function `main':
main.cpp: (.text+0x11): undefined reference to `Klasse::make()'
collect2: ld returned 1 exit status
------------------------MAIN LINKED WITH KLASSEN LIB

Wieso findet der Linker meine Klasse nicht?

Viele Grüße,
Benny
 
Hi.

Die Reihenfolge der Dateien auf der Kommandozeile ist signifikant.
Code:
g++ -L. main.o -o prog -lkLib

Du solltest lieber ein Tool wie make oder CMake verwenden.

Gruß
 
Danke euch beiden.

Ich verwende eigentlich auch Make nur ist Das Projekt so groß und unübersichtlich
das ich das Problem verkleinert und den Kompiliervorgang zerlegt hab.

Ich wusste nicht das die Reihenfolge beim linken relevant ist.
Die pthread library linke ich auch dazu und sie steht ebenfalls vor den
Objektdatein. Allerdings funktioniert es da.

Vielen dank nochmal.
 
Zurück