Wie kann ich aus Source- und Header-Dateien eine Bibliothek erstellen?
-
Hallo,
ich habe das folgende Problem --- >
Ich muss gerade ein C++-Programm anpassen (P1). Dazu brauche ich ein anderes Programm (P2).
P2 besteht aus ca. 20 Source-Dateien und 20 Header-Dateien.Am Anfang dachte ich mir, dass wie folgt vorgehen soll:
- Header-Dateien von P2 in Include File von P1 einfügen
- Source-Dateien von P2 zu denen von P1 hinfügen
- Im Makefile die neuen .cpp - Dateien als .o - Dateien einfügenDas Problem ist, dass das Programm unübersichtlich wird.
Dann habe ich mir gedacht, dass es besser ist, wenn ich aus P1 eine Bibliothek erstelle, von der ich dann die Klassen verwenden kann.
Ich weiss aber nicht, wie ich das machen kann.
Kann mir einer von euch bitte helfen???Wie gesagt P1 besteht aus Datei1.h bis Datei20.h und das gleiche an Source-Dateien.
Zur Info --- > Ich verwende Eclipse CDT unter SUSE LINUX 10.1 (X86-64)
Viele Grüße,
CL
-
Moin,
du könntest eine Library aus deinem P2 Programm machen. Mit Eclipse gehe ich dabei so vor:
2 Projekte im Workspace erstellen, alle Files für die Lib in das eine Projekt kopieren, im Makefile dem g++ die Option "-shared" mitgeben, dann erstellt er statt einen Programm eine Library. An sonsten das Makefile wie gewohnt erstellen. Im 2. Projekt dann den Includepfad und Librarypfad auf das 1. Projekt setzen, fertig.
Hoffe das reicht dir in der Kürze
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Es war leider zu kurz :0)
Folgendes habe ich gemacht:
Für Projekt 1:
New -- Project --- C++ Project -- Shared library als prjecttype gewählt (habe Eclipse Europa) --- die Bibliothek LIBRARY genannt --- im Project LIBRARY habe ich dann die Dateien (.cpp und .h), die eine Bib werden sollen kopiert mit import, file system ----
Dann hatte ich eine Shared library LIBRARY mit den Dateien drin
Hier ist mein Makefile: wie soll ich es ändern??? -shared nach g++
################################################################################ # Automatically-generated file. Do not edit! ################################################################################ -include ../makefile.init RM := rm -rf # All of the sources participating in the build are defined here -include sources.mk -include subdir.mk -include session/fsm/subdir.mk -include session/subdir.mk -include msg/obj/subobj/subdir.mk -include msg/obj/TLV/subdir.mk -include msg/obj/subdir.mk -include msg/help_classes/subdir.mk -include msg/subdir.mk -include exception/subdir.mk -include objects.mk ifneq ($(MAKECMDGOALS),clean) ifneq ($(strip $(C++_DEPS)),) -include $(C++_DEPS) endif ifneq ($(strip $(CC_DEPS)),) -include $(CC_DEPS) endif ifneq ($(strip $(C_DEPS)),) -include $(C_DEPS) endif ifneq ($(strip $(CPP_DEPS)),) -include $(CPP_DEPS) endif ifneq ($(strip $(CXX_DEPS)),) -include $(CXX_DEPS) endif ifneq ($(strip $(C_UPPER_DEPS)),) -include $(C_UPPER_DEPS) endif endif -include ../makefile.defs # Add inputs and outputs from these tool invocations to the build variables # All Target all: pcc # Tool invocations pcc: $(OBJS) $(USER_OBJS) @echo 'Building target: $@' @echo 'Invoking: GCC C++ Linker' g++ -o"pcc" $(OBJS) $(USER_OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' # Other Targets clean: -$(RM) $(OBJS)$(C++_DEPS)$(EXECUTABLES)$(CC_DEPS)$(C_DEPS)$(CPP_DEPS)$(CXX_DEPS)$(C_UPPER_DEPS) pcc -@echo ' ' .PHONY: all clean dependents .SECONDARY: -include ../makefile.targets
Für Projekt 2:
Ich habe einfach ein C++-Hello World Projekt erstellt.
Dann --- properties --- paths and symbols --- Als include Path = "home/meinName/Workspace/LIBRARY" gewählt -- Und als Library Path genau das GleicheWie kann ich probieren, ob es funktioniert??
So, wie ich das im Folgendne Code probiere??#include <iostream> #include "/home/meinName/Workspace/LIBRARY/Test.h" using namespace std; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! Test test; return 0; }
-
Zum erstellen von Bibliotheken: Siehe Linux-FAQ.
Um dem GCC zu sagen, wo er nach Headern schauen soll, siehe -I-Option man: gcc
-
Ich habe es noch nicht geschafft. Aber, eine blöde Frage: Kann man eigentlich eine Bibliothek ausführen?
Ich habe jetzt eine Datei.a erstellen können aus den Header- und Source-Dateien.Gruß,
CL
-
[quote]Kann man eigentlich eine Bibliothek ausführen?[/quote]
Du kannst Funktionen in einer Lib aufrufen und damit ausführen, die Lib ist aber eine Lib und kein executable, da ihr der StartUp code fehlt.Ich benutze gcc zwar für ein embedded Project, aber schau Dir doch mal das Tool 'ar' an. In meinen Makefiles benutze ich den, um Libs zu erstellen.
LIB = myLibrary.a OBJECTS = myObj1.o myObj2.o myObj3.o ar -rv $(LIB) $(OBJECTS)
Wenn Du dann noch die Symboltabelle und anderes loswerden willst, nimm 'strip':
strip -S $(LIB)