Autor Thema: erzeugen einer *.lib  (Gelesen 6621 mal)

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« am: 06. February 2006, 11:56 »
moin,

wie erzeuge ich aus mehreren *.obj eine *.lib?

diese *.lib muss von dem linker der mit masm mitgeliefert wird akzeptiert werden.

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #1 am: 06. February 2006, 12:13 »
Nimm Microsoft Visual Studio. Damit sollte es gehen. Oder zumindest mit den gratis Kommandozeilencompilern aus dem Visual Studio.

mfg, jeb

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 06. February 2006, 12:58 »
wie heißt der Kommandozeilencompiler und kennst du die nötigen befehle dafür?

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 06. February 2006, 14:53 »
Sag mir wo de wohnst und ich schick dir die CD.....

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 06. February 2006, 15:09 »
ich besitze msvc 6.0, wie erstelle ich aus assemblierten *.obj dateien eine *.lib, bitte ausführlich.

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 07. February 2006, 09:40 »
und nun

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #6 am: 07. February 2006, 11:57 »
Hi!

Starte MSVC++6, mach ein neues Projekt und zwar ein DLL-Projekt. Lass den vorgegebenen Code so wie er ist und kompiliere dein Projekt. Dann gehe in den Projektordner und schau dir das Makefile an, welches von MSVC++6 erstellt worden ist. Darin sollte ja auch definiert sein, wie MSVC++6 aus den Objektdateien Binarys erzeugt.

mfg, jeb

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 07. February 2006, 13:03 »
moin,
ich besitze bereits zu *.obj assemblierten Quellcode. wenn ich diesen als inline assembler in msvc compelieren würde käme untötiger code durch den compiler hinzu.
gibt es da noch ne andere möglichkeit?

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 07. February 2006, 13:07 »
a sorry ich habe das beim ersten mal lesen falsch verstanden. ich werd mal sehen ob ich draus schlau werde

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 07. February 2006, 13:21 »
hm mit nmake wird da irgendetwas gemacht aber das hilft mir nicht weiter da kein bischen davon verstehe

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #10 am: 07. February 2006, 17:38 »
Hi!

nmake ist die make-Variante von Microsoft. Post am besten mals das Makefile, dann kann ich dir weiterhelfen. Vielleicht starte ich bei mir auch mal wieder Windows, dann kann ich nachschauen. Aber auf jeden Fall mal Makefile posten.

mfg, jeb

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 13. February 2006, 14:41 »
war fünf tage im urlaub, das make file ist aus einem projekt an dem ich mal gearbeitet habe ein eigene *.mak konnte ich nicht erzeugen weder beim erstellen einer dll oder dll+mfc.

# Microsoft Developer Studio Generated NMAKE File, Format Version 4.00
# ** DO NOT EDIT **

# TARGTYPE "Win32 (x86) Application" 0x0101

!IF "$(CFG)" == ""
CFG=sign13 - Win32 Debug
!MESSAGE No configuration specified.  Defaulting to sign13 - Win32 Debug.
!ENDIF

!IF "$(CFG)" != "sign13 - Win32 Release" && "$(CFG)" != "sign13 - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE on this makefile
!MESSAGE by defining the macro CFG on the command line.  For example:
!MESSAGE
!MESSAGE NMAKE /f "sign13.mak" CFG="sign13 - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "sign13 - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "sign13 - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF

!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
################################################################################
# Begin Project
# PROP Target_Last_Scanned "sign13 - Win32 Debug"
CPP=cl.exe
RSC=rc.exe
MTL=mktyplib.exe

!IF  "$(CFG)" == "sign13 - Win32 Release"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
OUTDIR=.\Release
INTDIR=.\Release

ALL : "$(OUTDIR)\sign14.exe"

CLEAN :
-@erase ".\sign14.exe"
-@erase ".\Release\SCHREIBE.OBJ"
-@erase ".\Release\LESEN.OBJ"
-@erase ".\Release\ACADLIB1.OBJ"
-@erase ".\Release\SIGN14lo.obj"

"$(OUTDIR)" :
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"

# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
# ADD CPP /nologo /Zp1 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D win=1 /D ads=1 /D "_x86_" /YX /c
CPP_PROJ=/nologo /Zp1 /ML /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D win=1\
 /D ads=1 /D "_x86_" /Fp"$(INTDIR)/sign13.pch" /YX /Fo"$(INTDIR)/" /c
CPP_OBJS=.\Release/
CPP_SBRS=
# ADD BASE MTL /nologo /D "NDEBUG" /win32
# ADD MTL /nologo /D "NDEBUG" /win32
MTL_PROJ=/nologo /D "NDEBUG" /win32
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x407 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS=/nologo /o"$(OUTDIR)/sign13.bsc"
BSC32_SBRS=
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"sign14.exe"
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
 odbccp32.lib /nologo /subsystem:windows /incremental:no\
 /pdb:"$(OUTDIR)/sign14.pdb" /machine:I386 /out:"sign14.exe"
LINK32_OBJS= \
".\Release\SCHREIBE.OBJ" \
".\Release\LESEN.OBJ" \
".\Release\ACADLIB1.OBJ" \
".\Release\SIGN14lo.obj" \
"..\WINADS.LIB"

"$(OUTDIR)\sign14.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
    $(LINK32) @<<
  $(LINK32_FLAGS) $(LINK32_OBJS)
<<

!ELSEIF  "$(CFG)" == "sign13 - Win32 Debug"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
OUTDIR=.\Debug
INTDIR=.\Debug

ALL : "$(OUTDIR)\sign14.exe"

CLEAN :
-@erase ".\Debug\vc40.pdb"
-@erase ".\Debug\vc40.idb"
-@erase ".\sign14.exe"
-@erase ".\Debug\SCHREIBE.OBJ"
-@erase ".\Debug\LESEN.OBJ"
-@erase ".\Debug\ACADLIB1.OBJ"
-@erase ".\Debug\SIGN14lo.obj"
-@erase ".\sign14.ilk"
-@erase ".\Debug\sign14.pdb"

"$(OUTDIR)" :
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"

# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
# ADD CPP /nologo /Zp1 /ML /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D win=1 /D ads=1 /D "_x86_" /YX /c
CPP_PROJ=/nologo /Zp1 /ML /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS"\
 /D win=1 /D ads=1 /D "_x86_" /Fp"$(INTDIR)/sign13.pch" /YX /Fo"$(INTDIR)/"\
 /Fd"$(INTDIR)/" /c
CPP_OBJS=.\Debug/
CPP_SBRS=
# ADD BASE MTL /nologo /D "_DEBUG" /win32
# ADD MTL /nologo /D "_DEBUG" /win32
MTL_PROJ=/nologo /D "_DEBUG" /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS=/nologo /o"$(OUTDIR)/sign13.bsc"
BSC32_SBRS=
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"sign14.exe"
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
 odbccp32.lib /nologo /subsystem:windows /incremental:yes\
 /pdb:"$(OUTDIR)/sign14.pdb" /debug /machine:I386 /out:"sign14.exe"
LINK32_OBJS= \
".\Debug\SCHREIBE.OBJ" \
".\Debug\LESEN.OBJ" \
".\Debug\ACADLIB1.OBJ" \
".\Debug\SIGN14lo.obj" \
"..\WINADS.LIB"

"$(OUTDIR)\sign14.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
    $(LINK32) @<<
  $(LINK32_FLAGS) $(LINK32_OBJS)
<<

!ENDIF

.c{$(CPP_OBJS)}.obj:
   $(CPP) $(CPP_PROJ) $<  

.cpp{$(CPP_OBJS)}.obj:
   $(CPP) $(CPP_PROJ) $<  

.cxx{$(CPP_OBJS)}.obj:
   $(CPP) $(CPP_PROJ) $<  

.c{$(CPP_SBRS)}.sbr:
   $(CPP) $(CPP_PROJ) $<  

.cpp{$(CPP_SBRS)}.sbr:
   $(CPP) $(CPP_PROJ) $<  

.cxx{$(CPP_SBRS)}.sbr:
   $(CPP) $(CPP_PROJ) $<  

################################################################################
# Begin Target

# Name "sign13 - Win32 Release"
# Name "sign13 - Win32 Debug"

!IF  "$(CFG)" == "sign13 - Win32 Release"

!ELSEIF  "$(CFG)" == "sign13 - Win32 Debug"

!ENDIF

################################################################################
# Begin Source File

SOURCE=\workspac\SCHREIBE.C
DEP_CPP_SCHRE=\
".\..\ADS.H"\
".\..\ADSLIB.H"\
".\..\ADSCODES.H"\
".\..\LESCHALL.H"\


!IF  "$(CFG)" == "sign13 - Win32 Release"


"$(INTDIR)\SCHREIBE.OBJ" : $(SOURCE) $(DEP_CPP_SCHRE) "$(INTDIR)"
   $(CPP) $(CPP_PROJ) $(SOURCE)


!ELSEIF  "$(CFG)" == "sign13 - Win32 Debug"


"$(INTDIR)\SCHREIBE.OBJ" : $(SOURCE) $(DEP_CPP_SCHRE) "$(INTDIR)"
   $(CPP) $(CPP_PROJ) $(SOURCE)


!ENDIF

# End Source File
################################################################################
# Begin Source File

SOURCE=\workspac\ACADLIB1.C
DEP_CPP_ACADL=\
".\..\ADSLIB.H"\
".\..\ADS.H"\
".\..\ADSCODES.H"\
".\..\LESCHALL.H"\


"$(INTDIR)\ACADLIB1.OBJ" : $(SOURCE) $(DEP_CPP_ACADL) "$(INTDIR)"
   $(CPP) $(CPP_PROJ) $(SOURCE)


# End Source File
################################################################################
# Begin Source File

SOURCE=\workspac\LESEN.C
DEP_CPP_LESEN=\
".\..\ADS.H"\
".\..\ADSLIB.H"\
".\..\ADSCODES.H"\
".\..\LESCHALL.H"\


"$(INTDIR)\LESEN.OBJ" : $(SOURCE) $(DEP_CPP_LESEN) "$(INTDIR)"
   $(CPP) $(CPP_PROJ) $(SOURCE)


# End Source File
################################################################################
# Begin Source File

SOURCE=\workspac\WINADS.LIB

!IF  "$(CFG)" == "sign13 - Win32 Release"

!ELSEIF  "$(CFG)" == "sign13 - Win32 Debug"

!ENDIF

# End Source File
################################################################################
# Begin Source File

SOURCE=\workspac\SIGN14lo.C
DEP_CPP_SIGN1=\
".\..\ADSLIB.H"\
".\..\ADS.H"\
".\..\ADSCODES.H"\
".\..\LESCHALL.H"\


"$(INTDIR)\SIGN14lo.obj" : $(SOURCE) $(DEP_CPP_SIGN1) "$(INTDIR)"
   $(CPP) $(CPP_PROJ) $(SOURCE)


# End Source File
# End Target
# End Project
################################################################################

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 13. February 2006, 15:15 »
mal noch ne frage die *.obj die ein assembler erzeugt, was ist das?

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 13. February 2006, 16:17 »
Das gleiche wie die Executeable auch (enthällt also Code und Daten, und BSS-Sektionen), nur enthällt die Relocateable (die .obj Datei) auch Informationen über die Symbole (Globale Variablen, Funktionen) und die Relocations (Stellen im Code oder den Daten, wo beim linken eine neue Addresse eingetragen werden muss.)
Der Linker nimmt dann mehrere Relocateables und ersetzt die Speicherstellen mit den richtigen Symbolen.

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 14. February 2006, 13:57 »
könnt ihr mir den komandozeilenbefehl nennen den masm benötigt um eine *.lib zu erzeugen und wie man *.obj dateien hinzufügt?
bitte verweist mich nicht auf das masm handbuch das kenn ich bin aber kenner was komandozeilenbefehle angeht und ein bsp. ist darin nicht angegeben.

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #15 am: 15. February 2006, 17:58 »
Hi!

Das Makefile ist schrecklich. Leider musste ich feststellen, dass MSVCPP6 kein makefile erstellt bzw. ich habe keins gefunden. Daher kann ich dich leider nur auf GCC verweisen. wie du damit eine DLL erstellst findest du auf der offiziellen WinPort page: http://www.mingw.org

mfg, jeb

nameac

  • Beiträge: 71
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 16. February 2006, 09:01 »
ich hab mich mal noch ein bisschen schlau gemacht, ich hatte nämlich gelesen das sich mehrere far prozeduren in einer *.lib zusammenfassen lassen dies ist aber nicht so ganz richtig, jetzt weiß ich das ich die far prozeduren in einer dll zusammen fassen kann davon eine lib erzeugen kann und über diese *.lib die in dem hauptprogramm benötigten unterprozeduren beim linken einbinden lassen kann. stimmt dies so weit oder fehlt noch etwas, könnte mir jemand ein überschauliches bsp. dafür posten, augenmerk auf die masm befehle zum erstellen einer dll und einer lib.

 

Einloggen