A
Anish Chapagain
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
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