delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/10/28/10:30:30

From: Jamie Grier <grier AT cs DOT colostate DOT edu>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Need help linking NASM code with DJGPP program
Date: Mon, 27 Oct 1997 17:12:31 -0700
Organization: Colorado State University
Lines: 52
Message-ID: <34552DEF.AE2B4B73@cs.colostate.edu>
References: <6325oq$60t AT pukrs7 DOT puk DOT ac DOT za>
NNTP-Posting-Host: slip18.cs.colostate.edu
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

> The object file is created with: nasm -f coff grfx_a.asm
> Now, when I try to link the external routine into my DJGPP C++
> program, the linker responds with:
> "undefined reference: void GRFXBackgrBlit(unsigned char *, unsigned
> char *, int)"
> All the other assembler functions (GRFXClearBuffer etc.) link orrectly
> with the same type of header file. So the problem doesn't seem to be
> with the C++ portions of the program.
> 
> I discovered that removing one of the pointers from the GRFXBackgrBlit
> parameter list in both the C++ and assembler source files causes the
> function to be recognised by the DJGPP linker. It seems that one is
> unable to use two pointers as parameters in an external function. But
> this surely can't be.
> 
> I would appreciate it if someone could explain to me what I'm doing
> wrong. Please mail me at:
> 9618872 AT pukrs3 DOT puk DOT ac DOT za
> I will send a summary to the newsgroup at a later stage.
> 
> Rudolf Visagie


The easiest way to solve your problem would be to declare your external
functions using the modifier "C".  This tells the linker to use "C"
style linking:

        extern "C" functionName(type, type, etc)

Then just leave off the C++ name mangling in your .asm files.  For
example the above would just be:

        _functionName:
                mov ax, bx 
                etc.

If you don't want to do this than you can also compile your C++ source
file into an assembly file and look to see exactly what function name
it's expecting:
        
        gcc -S source.cc

Just look for the corresponding call in the .s file that's generated..

        call _functionName__FPUcii      or whatever.

Hope this helps....

-- 
Jamie Grier, CS student
Colorado State University
http://www.cs.colostate.edu/~grier

- Raw text -


  webmaster     delorie software   privacy  
  Copyright 2019   by DJ Delorie     Updated Jul 2019