How do I compile assembly routines for use with a C program (GNU assembler)?

I have a set of assembly function which I want to use in C programs by creating a header file. For instance, if I have asm_functions.s which defines the actual assembly routines and asm_functions.h which has prototypes for the functions as well as some standard #define's I needed. My goal is to use a C program, say test_asm.c to call the assembly functions. asm__functions.h:

 #define ASM_CONST_1 0x80 #define ASM_CONST_2 0xaf

uint8_t asm_foo( int, int, int );

asm__functions.s:
 /* dont need this: #include "asm_functions.h" */

.section .text .type asm_foo, @function asm__foo: /* asm code with proper stack manipulation for C calling conventions */ ret

test__asm.c: #include "asm_foo.h"

int main()

In a situation like this what would be the proper way to compile a link the program? I was trying something like this:

 gas -o asm_foo.o asm_foo.s gcc -o test_asm test_asm.c

But I still get a linker error from GCC saying that my assembly routine is undefined. I hope this contrived example is good enough to explain the situation. Thanks! EDIT: Here is a snippet of output when I compile with a single command:

 tja@tja-desktop:~/RIT/SP2/latest$ gcc -o test_pci pci_config.s test_pci.c /tmp/ccY0SmMN.o: In function _pci_bios_read_byte': (.text+0x8): undefined reference toPCI_FUNCTION_ID' /tmp/ccY0SmMN.o: In function _pci_bios_read_byte': (.text+0xa): undefined reference toREAD_CONFIG_BYTE' /tmp/ccY0SmMN.o: In function _pci_bios_read_byte': (.text+0x18): undefined reference toPCI_BIOS_FUNCTION_INT' /tmp/ccY0SmMN.o: In function _pci_bios_read_byte': (.text+0x1b): undefined reference toBAD_REGISTER_NUMBER' /tmp/ccY0SmMN.o: In function _pci_bios_read_word': (.text+0x30): undefined reference toPCI_FUNCTION_ID' .

All of those, such as PCI_FUNCTION_ID, are defined in my header file, which is included by the C program. When I compile the assembly code by itself there are no errors.