|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
[C++] Incompatibilità linking librerie fra compilatori diversi
allora, sono entrato nel fantastico mondo Windows (eppure nel mio CV c'e´ scritto a chiare lettere che sono esperto su Unix/Linux
![]() anti intuitivo, anti logico, anti tutto. Comunque ormai alea iacta est quindi ... e poi per progettare la comunicazione tra soldati che guidano un carro armato virtuale ne vale la pena ![]() sto lavorando con Eclipse, compilando un programma con g++. Devo usare una funzione in una libreria diciamo lib.dll quindi metto -L<dir> e -llib (giusto ?) Beh, compila e linka se NON uso la funzione, come cerco di usarla: undefined reference to ... ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
forse ha ragione, ho aperto un 3d chiedendo aiuto ma spalando merda su windows
![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Esattamente: non mi sembra il modo corretto.
Comunque se vuoi lavorare in C++ in Windows il consiglio che ti posso dare è di passare a VS2005 C++ che è un ottimo ambiente di lavoro.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Comunque grazie lo stesso
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Solitamente ti vengono dati due file. Il .dll e il .a, te devi linkare il .a al tuo eseguibile.
Se non hai il .a allora devi richiamare la funzione a runtime tramite LoadLibrary e GetProcAddress. http://msdn2.microsoft.com/it-it/lib...y5(VS.80).aspx Ultima modifica di cionci : 11-10-2007 alle 08:04. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#9 | ||
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Quote:
(come veramente sento dire spesso dire qui ![]() E´ che ieri non c'ho visto piu´, dopo 2 ore a cercare di capire come andava mi son sfogato aprendo un 3d denigratorio ... chiedo scusa ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
||
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
ok, grazie del link ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì
![]() Il .a è la libreria statica, ma non credo che il .dll sia nella forma linkabile dal gcc. Se si vuole fare un linking dinamico suppongo che si debba ricorrere all'installazione della shell di Cygwin o di MSYS per poter gestire tutta la questione ld. |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
ritiro le scuse, fa proprio schifo ![]() il dll non e´ nostro ma di una soc. esterna, qui abbiamo solo il .h ho anche dovuto installare msys e mingw ma per adesso son solo li, non saprei neanche cosa farci.
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Chiaro che devi caricarla una ad una, se vuoi usare il solo .dll.
Ma il .a ce l'hai ? Sinceramente non ho mai linkato dinamicamente con GCC, ci sta che basti impostare il tipo di linking con qualche opzione del compilatore. In Linux come facevi ? |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Sotto windows le cose funzionano in modo un pò differente.
Dovrebbe essere possibile per gcc, se ricordo bene, linkare direttamente una dll. Controlla che, se la dll è in c e il tuo codice in c++, l'header contenga gli extern "C" necessari. Viceversa se la dll è in c++, deve essere stata generata anch'essa da un g++ in quanto non c'è un modo unico con cui i diversi compilatori effettuano il mangle dei simboli c++.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#15 | ||
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Il .a non ce l'ho ma comunque mi rifiuto di linkarla statica ho trovato del codice qui in rete e fanno come dici tu. LoadLib e GetProc ... Quote:
![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
||
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quello che voleva sapere ilsensine è se la dll è stata creata con gcc o con un altro compilatore.
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Esatto. I nomi delle funzioni vengono rappresentati in maniera diversa dai diversi compilatori c++.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
ah ok, scusa. Non so perche´la dll e´stata fatta da una soc esterna ... in Rep Ceca.
Ho trovato pero´ la relativa lib. Quindi ho una .dll e una .lib
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora se hai un .lib sicuramente non è stata fatta con GCC.
Mi immagino che il sorgente non ci sia ![]() |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Ricorda che se vedi le brutte puoi sempre usare LoadLibrary & co. Solo ricorda che la stringa da passare a GetProcAddress è il nome "mangled" delle funzioni, che devi estrarre dalla dll.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:42.