🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1034

Re: HILFE: Probleme beim Linken mit mit WATCOM

#1034
From: Vitalik Polowinkin
Date: Mon, 18 Dec 1995 18:32
94 lines
3326 bytes
Tag, Mike !

-=> Quotes a message (4b3ebt$goc@pyrrhus-f.hrz.tu-chemnitz.de) in /de/comp/lang/c++
-=> from mis to  at 18.12.95 10:04

>  ich habe einige Probleme beim Konvertieren meiner Programme von Borland
> C++ nach Watcom C++. Besonders beim Liken von Assembler und C++ Moduln.
> Ein Beispiel [tut nichts, zeigt nur das Problem] :


> C++ : ********************************************************************
> * 	int VT;
> 	extern "C" ASM_Test (void);

  mit 'extern "C"' muessen nicht nur Funktionen, sondern auch alle  
Variablen deklariert werden, die mit den nicht-C++ Modulen gelinkt werden  
muessen, also ein 'extern "C" VT' sollte es sein.


> 	void main (void)
> 	        {
> 	        ASM_Test ();
> 	        }
>
> Assembler : **************************************************************
> * 	.386
> 	.model flat
>
> 	.code
> 	extrn VT:dword	 	         ; THIS DOES'NT WORK !!!!!!!!!!!!!!!!!!
> 					 ; THE LINKER DOES'NT FOUND !!!!!!!!!!!

  Versuch's mit 'extern _VT:dword'

> 	public ASM_Test_
> 	ASM_Test_ proc
> 	        push ecx
> 	        push ebp

> 	        mov  esp,ebp
> 	        pop  ebp
> 	        pop  ecx
> 	        ret
> 	ASM_Test_ endp
> 	end

  Falls Du spaeter die Argumente in Deine ASM-Routine uebergeben moechtest,  
vergiss nicht, dass defaultmaessig die register call conventions wirksam  
sind. Falls Du es bequemer (stack call convention) haben moechtest - '/4r'  
oder '/5r' -Kommandozeilenoption angeben oder die ASM_Test-Deklaration in  
C++ source mit '__cdecl' versehen.



> **************************************************************************
> ***** And that is what happens :
>
> wmake -f d:\watcom\programs\vesa\v16.mk -h -e
> wasm test.asm -i=d:\WATCOM\h -mf -5r -w4 -e25 -zq
> wpp386 ..\go.cpp -i=d:\WATCOM\h -w4 -e25 -zq -otexan -d2 -5r -bt=dos -mf
> wlink d all SYS dos4g op m op c op maxe=25 op q op symf @v16.lk1
> file test.obj(test.asm): undefined symbol VT
> Error(E42): Last command making (d:\watcom\programs\vesa\v16.exe) returned
> a bad status Error(E02): Make execution terminated
> Execution complete
>
>
> NUN das Problem : WARUM FINDET DER LINKER DIE IM C++ MODUL DEKLARIERTE
> VARIABLE 'VT' IM ASSEMBLERMODUL NICHT ???????????????? Unter BC
> funktioniert das ganze!

    Weil die Regeln, nach denen die source-Namen fuer den Linker ergaenzt  
werden, bei jedem Compiler anders sind.


   Ein guter Tip: schau in die vom Linker erzeugte Map-Datei rein. 'OPTION  
MAP', evtl. 'OPTION VERBOSE' aktivieren es. Suche nach Deinen Namen, wo er  
definiert (public) und wo er deklariert (extern) ist - vieles wird auf  
einmal klarer.  Der Disassembler (wdisasm) kann auch oft helfen.




> Wenn jemand Rat weiss, dann immer her damit! Vielen Dank im Voraus!

  -hiermit geschehen


> 								          mis
>
> 						mis@informatik.tu-chemnitz.de

Ciao.
Vitalij.
Technical Details
Message-ID: <5-5vA4u4eqB@uragan.go.sub.de>
Path: arc1-ca.pugleaf.net!uragan.go.sub.de!vitalik
References: <4b3ebt$goc@pyrrhus-f.hrz.tu-chemnitz.de>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!uragan.go.sub.de!vitalik
Date: 18 Dec 1995 19:32:00 +0100
From: vitalik@uragan.go.sub.de (Vitalik Polowinkin)
Newsgroups: de.comp.lang.c++
Message-ID: <5-5vA4u4eqB@uragan.go.sub.de>
References: <4b3ebt$goc@pyrrhus-f.hrz.tu-chemnitz.de>
Subject: Re: HILFE: Probleme beim Linken mit mit WATCOM
X-Newsreader: CrossPoint v3.1 R/C7075
Organization: Vitalik's Compi, HaDiKo, Karlsruhe, D