Hallo, ich stehe gerade auf dem Schlauch. Und zwar müsste ich in ein C++-Projekt unter Eclipse für ODBC- und Socket-Routinen die entspechenden Bibliotheken einbinden. Wie ich das sehe, wären das die Bibliotheken "libodbc32.a" und "libws2_32.a" aus dem Verzeichnis "C:/MinGW/lib/" Die Sourcecode-Dateien werden schon komplett übersetzt, aber der Linker macht Probleme. Das seltsame ist, wenn ich als LIB_DIR "../Library/Lib/" (wo ist das) und als LIB_NAME "odbc" als angebe, werden zumindest die ODBC-Routinen gefunden (von woher, ich habe für GCC gar keine Datei ODBC ?) Hat jemand einen Tipp, wie ich die benötigten Library-Dateien inklusive Pfad im makefile korrekt angebe ? D A N K E ! Ich verwende ein Makefile, das am Anfang so aussieht : # Compiler-Einstellungen CXX = g++ CXXFLAGS = ${FLAGWIN} ${FLAGOPTI} CLNFLAGS = ${FLAGLIB} # Target-Einstellungen TARGET_EXE = master2.exe # benötigte Libs #LIB_DIR = ../Library/Lib/ LIB_DIR = C:/MinGW/lib/ LIB_NAME = libodbc32.a libws2_32.a # verschiedene Standardflags TEMPFLAG = FLAGOPTI = -O -O1 -O2 -march=pentium FLAGWIN = -mwindows -mno-cygwin FLAGLIB = -L${LIB_DIR} -l${LIB_NAME} # die Standard-Targets all : ${TARGET_EXE} clean : rm -rf *.o # die einzelnen Dateien ${TARGET_EXE} : ana_tele_ib.o ............
LIB_NAME = libodbc32.a libws2_32.a sollte LIB_NAME = odbc32 ws2_32 sein.
>LIB_NAME = libodbc32.a libws2_32.a Heissen deine libs denn wirklich liblibodbc32.a und liblibws2_32.a? Aus für Windowsnutzer unerfindlichen Gründen fügt der linker die Vorsilbe lib zum angegebenen Nmane selbsttätig hinzu. Wenn deine libs also libodbc32.a und libws2_32.a heissen, müsste die Zeile im makefile so lauten: >LIB_NAME = odbc32.a ws2_32.a Oliver
grrr...
zu schnell abgeschickt, und trotzdem war Di Pi schneller und richtiger.
>LIB_NAME = odbc32 ws2_32
Oliver
Vielen Dank, jetzt funktioniert es ! Die benötigten Libraries heissen "libodbc32.a" und "libws2_32.a". Da muss man erst mal drauf kommen, dass im makefile "odbc32" und "ws2_32" angegeben werden muss ! Und wo ist in Eclipse eigentlich der Pfad "LIB_DIR = ../Library/Lib/" definiert ? (in meinem Fall ist das vermutlich der konkrete Pfad "C:\MinGW\lib") Nachfolgend der Vollständigkeit halber der aktualisierte relevante Auszug des makefiles : # benötigte Libs LIB_DIR = ../Library/Lib/ LIB_NAME1 = odbc32 LIB_NAME2 = ws2_32 # verschiedene Standardflags TEMPFLAG = FLAGOPTI = -O -O1 -O2 -march=pentium FLAGWIN = -mwindows -mno-cygwin FLAGLIB = -L${LIB_DIR} -l${LIB_NAME1} -l${LIB_NAME2}
Wenn du einen Makefile verwendest dann sind die Library-Angaben in Eclipse selber nur noch für den Eclipseeditor ( Intellisense u.s.w.). Das kompilieren wird dann NUR durch den Makefile gesteuert, den Eclipse dann nicht verwaltet. Du kannst in Eclipse dann alle Includepfade und Libraries aus den Projekteinstellungen entfernen und das Programm wird trotzdem kompiliert und gelinkt. Die schöne Unterstützung des Editors funktioniert dann nur nicht mehr. Erst wenn du in Eclipse ein Projekt ohne Makefile anlegst, dann werden die Angaben in den Projekteinstellungen auch für das Build verwendet.
Ok, aber bei mir im makefile wird das Lib-Verzeichnis so angegeben : LIB_DIR = ../Library/Lib/ Der Klartext-Pfad steht nirgendwo im makefile, woher weiss Eclipse dann, dass sich die Lib-Dateien im Verzeichnis "C:\MinGW\lib" befinden ?
Eclipse muss das nicht wissen, da Eclipse den File nicht kompiliert und linkt sondern der Compiler/Linker unter MinGW. Eclipse ruft den Compiler/Linker nur auf. Damit endet die Beteiligung von Eclipse am kompilieren.
Gut, damit verschiebt sich die Frage aber nur um eine Stufe : Woher weiss es dann der Compiler/Linker unter MinGW ? Gibt es da irgendwo auomatisch erzeugte ini-Dateien (ich habe da nämlich nichts manuell eingestellt). Würde mich wirklich interessieren.
Der Compiler/Linker findet libs, includes, und alles andere über die im Environent gesetzten Pfade. Tipp mal in ein Comandofenster "PATH" ein, da siehst du, was da alles vordefiniert ist. Oliver
Tatsächlich, die Verzeichnisse sind im Pfad eingetragen. Muss bei der Installation automatisch gemacht worden sein. Alles klar und DANKE !
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.