Newsgroup: it.comp.programmare.win32
Titolo: [Help] Cerco IMPLIB per VC++

//--------------------//
//       Domande        //
//--------------------//
Q1) Esiste un analogo al tool ImpLib.exe di Borland per produrre librerie
statiche a partire da dll senza def files per VC++ ?
Q2) Che differenza c'è tra linkare un programma con libc.lib, libcmt.lib o
msvcrt.lib (cioè compilare con le opzioni /ML /MT o /MD del compilatore VC++
.Net 2003) ?
//-----------------------//
//          Antefatto           //
//-----------------------//
Dopo aver scaricato il VCToolkit2003 su consiglio di questo newsgroup, mi
sono accorto che mancavano ancune librerie essenziali, e ho pensato a come
crearle dalle dll di sistema. Su Google ho trovato proprio a  questo
riguardo:
//---------------------------TRATTO DA INTERNET-----------------------------
msvcrt.lib missing
Get the corresponding msvcrt.dll (from %SystemRoot%\system32).
Get a WINDOWS version of sed (the stream editor), i.e. from
unxutils.sourceforge.net
.
Crate file exports.sed:
 /[ \t]*ordinal hint/,/^[ \t]*Summary/{
  /^[ \t]\+[0-9]\+/{
    s/^[ \t]\+[0-9]\+[ \t]\+[0-9A-Fa-f]\+[ \t]\+[0-9A-Fa-f]\+[
\t]\+\(.*\)/\1/p
  }
 }
Do:
echo EXPORTS> msvcrt.def
link -dump -exports msvcrt.dll | sed -nf exports.sed >> msvcrt.def
link -lib -machine:X86 -def:msvcrt.def -out:msvcrt.lib
This works for every "missing .lib", if you have the corresponding .dll.
//--------------------------------------------------------------------------
------------
Seguendo tutte le istruzioni e creando anche la libreria msvcprt.lib (le dll
relative sono anche nella dir Bin del VCToolkit!), visto che mi veniva
richiesta in fase di compilazione, ho provato a compilare gli esempi (qui
riporto sample/Conformance), ma ho ottenuto:
//-----------------------DOS
PROMPT-------------------------------------------
C:\VCToolkit2003\samples\Conformance>cl /EHsc /MD *.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3052 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
Conformance.cpp
Microsoft (R) Incremental Linker Version 7.10.3052
Copyright (C) Microsoft Corporation.  All rights reserved.
/out:Conformance.exe
Conformance.obj
Conformance.obj : error LNK2001: unresolved external symbol __fltused
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
Conformance.exe : fatal error LNK1120: 2 unresolved externals
//--------------------------------------------------------------------------
---------
In generale l'errore che mi dà sempre è:
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
(Ovviamente tutto funziona senza l'opzione /MD)

.Net 2003) ?
Il Visual C++ ha le librerie runtime C per programmi single-thread ,
multi-thread (MT) . Inoltre per oguna di queste ne siste una eguale
per il debug (D)  . Ancora puoi usare per la runtime C la libreria di
importazione msvcrt.lib per linkare il tuo programma alla relativa dll
in fase di avvio .


Ma la tecnica che ho usato io per costruire la msvcrt.lib in che cosa era
sbagliata ?

Comunque dovrei aver risolto il problema con un tool che si chiama lib.exe
che (anche se non l'ho ancora provato) dovrebbe funzionare e dovrebbe essere
proprio di Microsoft.
Grazie comunque.