www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/01/05/13:36:45

From: Damian Yerrick <Bullcr_pd_yerrick AT hotmail DOT comRemoveBullcr_p>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Nasm & Gcc. HELP!
Organization: Pin Eight Software http://pineight.8m.com/
Message-ID: <u63c5t86gdvhcecdqkv6ahrn5qcdf6h710@4ax.com>
References: <934tdg$oj0$1 AT nnrp1 DOT deja DOT com>
X-Newsreader: Forte Agent 1.7/32.534
MIME-Version: 1.0
Lines: 63
X-Trace: +LkLmgGeDkTBzHawEMhNGPNi0isN0BrzM03Rk3xb3feB/hUSt+p5MOugULHDQSgrjoAHJ/GbnPFJ!LtPpYZgD3iJlNi3ZDI9Yc51zmtZIb/wx1o0ywMqsKqb9frbWJXVkhXWYtf8qPXW4N4Szsbf0PfT/!iA==
X-Complaints-To: abuse AT gte DOT net
X-Abuse-Info: Please be sure to forward a copy of ALL headers
X-Abuse-Info: Otherwise we will be unable to process your complaint properly
NNTP-Posting-Date: Fri, 05 Jan 2001 18:05:02 GMT
Distribution: world
Date: Fri, 05 Jan 2001 18:05:02 GMT
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

On Fri, 05 Jan 2001 16:40:17 GMT, pixelpajas AT my-deja DOT com wrote:

>Hi .. I'm trying to learn how to use nasm
>assembler code with gcc but i get an error when i
>link the objects. Below are the source files and
>command compile/link entries.
>
>
>
>- 4k.c ----------------------------------------
>
>extern unsigned int keyget(unsigned int);
>
>void main(void)
>{
>	keyget(1);
>}
>
>-----------------------------------------------
>
>
>- lib.asm -------------------------------------
>
>[BITS 32]
>[GLOBAL _key]
>[SECTION .text]
>
>
>_key:         MOV       CX,1

[snip]

>first i build lib.asm -> nasm -f coff lib.asm
>
>then i compile 4k.c -> gxx -nostdlib -nostdinc -
>fno-builtin -fno-exceptions -c -O3 4k.c -r
>
>and at last i try to link -> ld -nostdlib -
>nostdinc -fno-builtin -fno-exceptions -e _main -
>oformat binary -o 4k.com 4k.o lib.o
>
>but in the last step i get -> " 4k.o
>(.text+0x6):4k.c: undefined reference to `_keyget
>(unsigned int)' "

1. The function should be called _keyget not _key in the asm source.
2. You are trying to compile C programs with gxx, which assumes all
source is C++.  (Use .cc or .cpp extension for C++ source.)
3. Because of this, you are trying to use C++ calling conventions for
a C calling conventions function.  Try wrapping your prototypes with

extern "C"
{
  /* prototypes */
}

-- 
<O
( \   GNOME vs. KDE: the game!
 X    http://pineight.8m.com/nes.htm

This is McAfee VirusScan. Add these two lines to your signature to
prevent the spread of signature viruses.  http://www.mcafee.com/

- Raw text -


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