0

I keep getting the undefined reference error when calling a c function from c++ code:

void proxy(char *str);

In my funcs.h file, I use the

#ifdef __cplusplus
extern "C" {
#endif

wrapper, and include funcs.h in my c++ code. I also declare the function as

extern "C" void proxy(char *str);

above my main function in the c++ file. But when I call the function, I get the undefined reference error. Any help?

Edited by mike_2000_17: Fixed formatting

3
Contributors
4
Replies
6
Views
5 Years
Discussion Span
Last Post by webishop
0

Where is proxy() defined?

proxy() is defined in funcs.c, declared in funcs.h and sym.h, the .h file for sym.cpp

0

Show how you are using the call, including variable definitions. It may be something as simple as passing a const char* argument to the proxy() function, which requires a non-const char* argument.

0

Function proxy(char *file) is declared in both sym.hpp and funcs.h.
In funcs.h, I have, (among other things,

/* function declarations */

extern "C" void proxy(char *file);

In sym.h, I have

#ifdef __cplusplus	
extern "C"
{
	int lookup(int ndx, char *sym);
	int lookup2(int ndx, char *sym, int type);
	void set_ival(int ndx, int sel, int value);
	void set_fval(int ndx, float value);
	void set_ptr(int ndx, int sel, void *ptr);
	char *fetch_name(int ndx);
	int fetch_ival(int ndx, int sel);
	float fetch_fval(int ndx);
	void *fetch_ptr(int ndx, int sel);
	void proxy(char *file);	
}
 
#endif

In my funcs.c file, I define the function as:

void proxy(char *file)
{
	FILE *f;
	
	f = fopen(argv[j], "r");
		
	if(!f)
	{
		yyerror("Error opening file.");
		return(1);
	}	

	yyrestart(f);
	yylineno = 1;
	yyparse();

	fclose(f);
	return;
}

and from within c++, in my main function, I call it as:

using namespace std;

#include <string>
#include <iostream>
#include "sym.h"
extern "C"{
#include "funcs.h"
}

extern "C" void proxy(char*);

int main(int argc, char **argv)
{

	int j;
	
	if(argc < 2)
		cout << "No input file given." << endl;
	
	proxy(char *argv);

	return(0);
}

Granted, I'm guilty of overkill on declarations, but this is the result of too much frustration.
I hope this provides enough information.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.