handling Struct and global function for C module

Anish Chapagain anishchapagain at gmail.com
Mon Aug 18 12:54:25 EDT 2008


Hi,
I have Structure in C, program and the structure is being used with
various function inside C coding but am getting undefined referenced
to global method and few of them too uses the sturct module.
my problem goes like this,

ex.h
-----------
#define NIL 0                   /* Indicates ptr is nil */
#define NO_CODER 0              /* Means do not use an arithmetic
coder */
#define DEFAULT_CODER 1         /* Default arithmetic coder */
#define FALSE 0                 /* For boolean expressions */
#define TRUE 1                  /* For boolean expressions */

typedef unsigned int boolean;
extern unsigned int debugModel;

typedef struct debugType
{
   unsigned int level;
   unsigned int level1;
   unsigned int progress;
   unsigned int range;
   unsigned int coder;
   unsigned int coder_target;
   unsigned int codelengths;
}debugType;
extern struct debugType Debug;

//main function for .c file
void usage(void);
void loadModels(FILE *fp);
void init_arguments(int argc, char *argv[]);
unsigned int *getText (FILE *fp, unsigned int eoln, unsigned int
del_last_eoln, unsigned int *len);
float codelengthText (unsigned int model, unsigned int *text, unsigned
int textlen);
void codelengthModels (unsigned int *text, unsigned int textlen);

//gloabal function for .c file running with local function
extern unsigned int TLM_create_context (unsigned int model);
extern void TLM_set_context_operation (unsigned int
context_operation);
extern void TLM_update_context (unsigned int model, unsigned int
context, unsigned int symbol);
extern void TLM_release_context (unsigned int model, unsigned int
context);
extern void TLM_dump_models (unsigned int file, void
(*dump_symbol_function) (unsigned int, unsigned int));
extern void TLM_set_tag (unsigned int model, char *tag);
---------------------------------------------------------------------
ex.c
--------
#include "ex.h"
int Exclude_eolns = 0;    /* For incuding/excluding eolns in the input
*/
int Delete_last_eoln = 0; /* For deleting the last eoln read in from
the input */
int Debug_model = 0;      /* For dumping out the model */
int Debug_chars = 0;      /* For dumping out the codelength character
by character */
int Display_entropy = 0;  /* For displaying cross-entropies and not
codelengths */

unsigned int TLM_Coderanges;
float TLM_Codelength;
unsigned int TLM_Context_Operation;


void loadModels (FILE * fp)
/* Load the models from file FP. */
{
   char tag [MAX_TAG], filename [MAX_FILENAME];
    //char tag [256], filename [256];

    unsigned int model;

    while ((fscanf (fp, "%s %s", tag, filename) != EOF))
    {
	model = TLM_read_model(filename, "Loading model from file",
"Codelength: can't open model file");
	TLM_set_tag (model, tag);
    }
}

void init_arguments (int argc, char *argv[])
{
    char *optarg; //extern char *optarg;
    int optind; //extern int optind;
    FILE *fp;
    unsigned int models_found;
    int opt;

    /* get the argument options */

    models_found = 0;
    Exclude_eolns = 0;
    Delete_last_eoln = 1;
    while ((opt = getopt (argc, argv, "ELcd:em:r")) != -1)
	switch (opt)
	{
	case 'E':
	    Exclude_eolns = 1;
	    break;
	case 'L':
	    Delete_last_eoln = 1;
	    break;
	case 'c':
	    Debug_chars = 1;
	    break;
	case 'd':
	    Debug_model = atoi (optarg);
	    break;
	case 'e':
	    Display_entropy = 1;
	    break;
	case 'm':
	    fprintf (stderr, "Loading models from file %s\n",
		    optarg);
	    if ((fp = fopen (optarg, "r")) == NULL)
	    {
		fprintf (stderr, "Encode: can't open models file %s\n",
			 optarg);
		exit (1);
	    }
	    loadModels (fp);
	    models_found = 1;
	    break;
	case 'r':
	    Debug.range = 1; //uses structure element range.
	    break;
	default:
	    usage ();
	    break;
	}
    if (!models_found)
    {
        fprintf (stderr, "\nFatal error: missing models\n\n");
        usage ();
    }
    for (; optind < argc; optind++)
	usage ();
}
----------------------------------------------------------------------------------------------------------------------------------

but while running setup.py build with distutils it's showing error as

_ex.o: In function 'init_arguments':
     _ex.c :89: undefined reference to _TLM_read_model
     _ex.c :95:  undefined reference to _TLM_set_tag

for all the global function declared within .h file and the calling
method from .c file,
also how can the Debug.range can be used...

thank's
anish



More information about the Python-list mailing list