View Full Version : [VC++]Le DLL buildate non hanno la lib corrispondente...
Salve,
come al solito stavo complicandomi la vita, tentando di scindere la mia engine in 3 dll separate, ognuna ad un livello di astrazione diverso (Core, Library, Engine).
Lo problema è che, sebbene compila tutto, il linking non va a buon fine poichè di queste 3 dll non vengono prodotte le librerie corrispondenti...
e quelle al livello inferiore interrompono il linking segnalando la mancanza.
Non so bene cosa dovrei fare per convincerlo a buildare l'accoppiata lib + dll, dato che ha SEMPRE fatto in questa maniera, se era selezionato "Libreria Dinamica (.dll)" come tipo di output...
Come dovrei fare per convincerlo a continuare così?
Scommetto che è una cavolata da qualche parte ma proprio non saprei dove mettere mano :asd:
controlla che sia impostato un nome valido per l'opzione /IMPLIB del linker (impostazioni del progetto, Linker, Advanced, Import Library; controlla che il nome sia impostato sia per la configurazione di Debug sia per quella di Release). di norma nell'IDE quell'opzione viene impostata a "$(TargetDir)$(TargetName).lib", dove $(TargetDir) e $(TargetName) sono due macro che l'IDE espande quando costruisce la command line.
Per puro caso ci sono arrivato anche io... per sicurezza ci ho copiato proprio il path dove vorrei che mettesse la library, ma non viene generato proprio niente :(
Devo settarla anche per Release oppure non va?
se non stavi compilando in modalità di Release non è quello il problema; puoi incollare command line e output del linker?
prova anche a fare una cosa banalissima, ovvero prima un clean di tutta la soluzione e poi un rebuild totale, perché non vorrei che il problema fosse banalmente che in realtà c'è qualche errore e lui non builda un bel niente, e la DLL che vedi è rimasta dall'ultima successful build :D
Distrutta la cartella e rifatto, la dll non rimaneva dalla build precedente :stordita:
Cmq ecco il log:
1>------ Rebuild All started: Project: CRenderCore, Configuration: Debug Win32 ------
1>Deleting intermediate and output files for project 'CRenderCore', configuration 'Debug|Win32'
1>Compiling...
**niente errori**
1>Linking...
1>LINK : D:\DEV\CRender\\bin\Debug\CRenderCore.dll not found or not built by the last incremental link; performing full link
1>Embedding manifest...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Build log was saved at "file://d:\DEV\CRender\Core\Debug\BuildLog.htm"
1>CRenderCore - 0 error(s), 1 warning(s)
2>------ Rebuild All started: Project: CRenderLibrary, Configuration: Debug Win32 ------
2>Deleting intermediate and output files for project 'CRenderLibrary', configuration 'Debug|Win32'
2>Compiling with CUDA Build Rule...
**un sacco di warning**
2>Compiling...
**parecchi altri warning**
2>nedmalloc.c
2>Linking...
2>LINK : fatal error LNK1181: cannot open input file 'CRenderCore.lib'
2>Build log was saved at "file://d:\DEV\CRender\Library\Debug\BuildLog.htm"
2>CRenderLibrary - 1 error(s), 62 warning(s)
Non saprei proprio cosa non va :stordita:
Vincenzo1968
14-06-2009, 17:12
Praticamente, nelle soluzioni "multi-projects", devi specificare l'ordine di build.
Per esempio, se abbiamo una soluzione che contiene due progetti di DLL: DllA e DllB, dove DllB utilizza le funzioni di DllA, dobbiamo agire così:
Click destro sulla soluzione:
http://www.guidealgoritmi.it/images/ImgForums/multi01.jpg
Scegli la voce "Projects Build Order"
Seleziona il tab "Dependencies"
Nella combo Projects seleziona "DllB"
Nella lista "Depends on" metti il segno di spunta su "DllA":
http://www.guidealgoritmi.it/images/ImgForums/multi02.jpg
già builda nel giusto ordine :sofico:
Infatti la lib non c'è quando serve, ma la dll si... ho controllato!
Continua ad essere strano :confused:
banryu79
15-06-2009, 11:44
1>------ Rebuild All started: Project: CRenderCore, Configuration: Debug Win32 ------
1>Deleting intermediate and output files for project 'CRenderCore', configuration 'Debug|Win32'
1>Compiling...
**niente errori**
1>Linking...
1>LINK : D:\DEV\CRender\\bin\Debug\CRenderCore.dll not found or not built by the last incremental link; performing full link
1>Embedding manifest...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Build log was saved at "file://d:\DEV\CRender\Core\Debug\BuildLog.htm"
1>CRenderCore - 0 error(s), 1 warning(s)
Ma il doppio backslash prima di "bin" nel path per CRenderCore.dll è normale?
Nuh, infatti l'ho fixato ma non cambia niente... apparte che ora trova il file.
Però comunque non scrive la lib :stordita:
deve starci qualche errore da qualche parte evidentemente.
So che ormai il thread era defunto, ma metto la soluzione uguale:
In pratica, non stavo esportando alcuna classe, e il file non veniva creato...
avevo scordato _declspec(dllexport) :doh:
Ora l'ho messo e va :D
se avessi postato anche la command line del linker come ti avevo chiesto ce ne saremmo accorti: avremmo notato che mancava il file .def :D :Prrr:
vabbè me ne ero scordato... anche perchè non so nemmeno dove si rimedia la command line attuale del linker, io vi avrei massimo potuto dare quella col $(qualcosa) che non aiutava sicuro.:stordita:
vabbè me ne ero scordato... anche perchè non so nemmeno dove si rimedia la command line attuale del linker, io vi avrei massimo potuto dare quella col $(qualcosa) che non aiutava sicuro.:stordita: nel build log salvato in "d:\DEV\CRender\Core\Debug\BuildLog.htm" oppure nelle opzioni del linker, tab "Command Line".
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.