473,387 Members | 1,542 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

undefined symbol yylex

Hello,
Please excuse me as Iam not posting this to correct group. I
have a parser code obtained from flex command. I have many other files.
When I compile them Iam getting a message like: undefined symbol yylex.
What might have went wrong?

Jul 14 '06 #1
8 17957
pa******@gmail.com wrote:
Hello,
Please excuse me as Iam not posting this to correct group. I
have a parser code obtained from flex command. I have many other files.
When I compile them Iam getting a message like: undefined symbol yylex.
What might have went wrong?
Two things to check spring to mind:
- Ensure that you are incorporating the generated lex.yy.c file into
your build
- If you are invoking yylex from a C++ file, make sure you use extern
"C" when declaring it.
You'll probably also get a link error for a missing yywrap. If so write
a simple C file with this in it:
int yywrap()
{ return 1; }

HTH.

Jul 14 '06 #2
<pa******@gmail.comwrote in message news:11**********************@m73g2000cwd.googlegr oups.com...
Hello,
Please excuse me as Iam not posting this to correct group. I
have a parser code obtained from flex command. I have many other files.
When I compile them Iam getting a message like: undefined symbol yylex.
What might have went wrong?
Compilers don't give error messages like that. That's a linker
error. Your files all compiled fine, but the linker couldn't
find something to link symbol yylex to. This can occur if you
list the flex library on the gcc command line, even if you're
not actually using flex in program. One thing that can cause
that is, you tell gcc to compile and link a bunch of modules
to an executable, but forget to include the module with main().

For example, when I try to make an exe file out of a blank cpp
file, like so:

// Begin blank.cpp
// (no content)
// End blank.cpp

gpp blank.cpp -lfl -o blank.exe

Error: in function "_main": libmain.c:11: Undefined reference
to symbol "_yylex". Collect2: ld returned 1 exit status.

What happened is, gcc sees that you mentioned the flex library,
so it assumes you want main() generated for you, and a reference
in main to a (non-existant) yylex funtion. Since you never
provided an actual flex file, there IS NO SUCH FUNCTION. So,
you get that error.

So, look to make sure you actually do have a main() function.
More generally, look for files you may have forgotten to include
in the build.

--
Cheers,
Robbie Hatley
East Tustin, CA, USA
lone wolf intj at pac bell dot net
(put "[usenet]" in subject to bypass spam filter)
http://home.pacbell.net/earnur/
Jul 14 '06 #3
Thank you very much. I now used extern "C" and I got rid of the error.
tragomaskhalos wrote:
pa******@gmail.com wrote:
Hello,
Please excuse me as Iam not posting this to correct group. I
have a parser code obtained from flex command. I have many other files.
When I compile them Iam getting a message like: undefined symbol yylex.
What might have went wrong?

Two things to check spring to mind:
- Ensure that you are incorporating the generated lex.yy.c file into
your build
- If you are invoking yylex from a C++ file, make sure you use extern
"C" when declaring it.
You'll probably also get a link error for a missing yywrap. If so write
a simple C file with this in it:
int yywrap()
{ return 1; }

HTH.
Jul 14 '06 #4
Thank you for your kind information. I came to knew much about flex.
Robbie Hatley wrote:
<pa******@gmail.comwrote in message news:11**********************@m73g2000cwd.googlegr oups.com...
Hello,
Please excuse me as Iam not posting this to correct group. I
have a parser code obtained from flex command. I have many other files.
When I compile them Iam getting a message like: undefined symbol yylex.
What might have went wrong?

Compilers don't give error messages like that. That's a linker
error. Your files all compiled fine, but the linker couldn't
find something to link symbol yylex to. This can occur if you
list the flex library on the gcc command line, even if you're
not actually using flex in program. One thing that can cause
that is, you tell gcc to compile and link a bunch of modules
to an executable, but forget to include the module with main().

For example, when I try to make an exe file out of a blank cpp
file, like so:

// Begin blank.cpp
// (no content)
// End blank.cpp

gpp blank.cpp -lfl -o blank.exe

Error: in function "_main": libmain.c:11: Undefined reference
to symbol "_yylex". Collect2: ld returned 1 exit status.

What happened is, gcc sees that you mentioned the flex library,
so it assumes you want main() generated for you, and a reference
in main to a (non-existant) yylex funtion. Since you never
provided an actual flex file, there IS NO SUCH FUNCTION. So,
you get that error.

So, look to make sure you actually do have a main() function.
More generally, look for files you may have forgotten to include
in the build.

--
Cheers,
Robbie Hatley
East Tustin, CA, USA
lone wolf intj at pac bell dot net
(put "[usenet]" in subject to bypass spam filter)
http://home.pacbell.net/earnur/
Jul 14 '06 #5
What is the significance of using extern "C". What makes using it to
avoid link error

tragomaskhalos wrote:
pa******@gmail.com wrote:
Hello,
Please excuse me as Iam not posting this to correct group. I
have a parser code obtained from flex command. I have many other files.
When I compile them Iam getting a message like: undefined symbol yylex.
What might have went wrong?

Two things to check spring to mind:
- Ensure that you are incorporating the generated lex.yy.c file into
your build
- If you are invoking yylex from a C++ file, make sure you use extern
"C" when declaring it.
You'll probably also get a link error for a missing yywrap. If so write
a simple C file with this in it:
int yywrap()
{ return 1; }

HTH.
Jul 14 '06 #6

pa******@gmail.com wrote:
What is the significance of using extern "C". What makes using it to
avoid link error
Basically whenever you call C functions from C++ you must declare them
as extern "C".
Easiest explanation is to first Google for "C++ name mangling" and read
up on that. Now, using extern "C" tells the compiler that the symbols
in question (in this case yylex) come from C and have therefore not
been mangled. I think there may be other ramifications to do with
calling conventions but that's the gist of it.

Jul 14 '06 #7

"Robbie Hatley" <bo***********@no.spamwrote in message
news:xF*******************@newssvr12.news.prodigy. com...
<pa******@gmail.comwrote in message
news:11**********************@m73g2000cwd.googlegr oups.com...
>Hello,
Please excuse me as Iam not posting this to correct group. I
have a parser code obtained from flex command. I have many other files.
When I compile them Iam getting a message like: undefined symbol yylex.
What might have went wrong?

Compilers don't give error messages like that. That's a linker
error. Your files all compiled fine, but the linker couldn't
find something to link symbol yylex to. This can occur if you
list the flex library on the gcc command line, even if you're
not actually using flex in program. One thing that can cause
that is, you tell gcc to compile and link a bunch of modules
to an executable, but forget to include the module with main().

For example, when I try to make an exe file out of a blank cpp
file, like so:

// Begin blank.cpp
// (no content)
// End blank.cpp

gpp blank.cpp -lfl -o blank.exe

Error: in function "_main": libmain.c:11: Undefined reference
to symbol "_yylex". Collect2: ld returned 1 exit status.

What happened is, gcc sees that you mentioned the flex library,
so it assumes you want main() generated for you, and a reference
in main to a (non-existant) yylex funtion. Since you never
provided an actual flex file, there IS NO SUCH FUNCTION. So,
you get that error.

So, look to make sure you actually do have a main() function.
More generally, look for files you may have forgotten to include
in the build.
You've shown an "undefined reference" error, which is indeed a linker error.
But compilers do issue "undefined symbol" errors, which is what the OP said
it was. They occur when the symbol (such as a variable name) hasn't been
declared in the current scope. Different compilers may describe that
differently ("undeclared", "undefined", "unknown", whatever), of course, but
they do occur.

You may be right that it was a linker error, but from the original post,
there's no way to be sure of that (without some prior knowledge of that lex
stuff). Which is just another reason why posters should include the text of
the error message, and if it's a compile error, then the line(s) of code
referred to as well.

-Howard


Jul 14 '06 #8
pa******@gmail.com wrote:
Thank you for your kind information. I came to knew much about flex.
Robbie Hatley wrote:


Please don't top-post. Your replies belong following or interspersed
with properly trimmed quotes. See the newsgroup FAQ:
<http://www.parashift.com/c++-faq-lite/how-to-post.html#faq-5.4>


Brian
Jul 14 '06 #9

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: pervinder | last post by:
Hi, I have a c++ application which depends on some other libs which uses stlport When i build the application, it works fine on sun/linux/hp platform. (provided the .a for the dependency libs) ...
0
by: John Graat | last post by:
Hi all, I've built the STLport-462 library on AIX-4.3.3 using gcc-3.3.2. No errors during compilation. However, during linking the following error occurs: ld: 0711-317 ERROR: Undefined symbol:...
10
by: eugene | last post by:
I'm trying to compile and run some c++ code to be called from Matlab (mex file) and I'm getting "Invalid MEX-file ... undefined symbol" error. Anybody knows where to look for solution? >>mex...
4
by: r.nikhilk | last post by:
Hi, We are porting C++ applications from 32 bit to 64 bit on AIX platform. (The current version of AIX is 5.3 and xlC verison is 8.0). We are able to compile the applications by including the...
3
by: Kenneth Kahl | last post by:
Hello, I would like to call a C++ programm out of Java with help of JNI. By the followed command I created a "shared library": g++ -shared -o libcalculate.so rechner.cpp When I create an...
1
by: yamitmehta | last post by:
When I compile to code using g++arm of VxWorks 5.5 and put it on my board i get the follwing undefined symbols:- Cpool and Csingleton are template classes. CPool has the static member...
1
by: Justin Johnson | last post by:
Hello, I'm trying to build Python 2.5.0 on AIX 5.3 using IBM's compiler (VisualAge C++ Professional / C for AIX Compiler, Version 6). I run configure and make, but makes fails with undefined...
3
by: sdeathstar | last post by:
I am working on IBM AIX machine and using XLC C++ complier version 8.0. 1) Able to compile the objects on AIX from C and C++ source code. 2) Able to create the libraries (combination of C & C++,...
1
by: Michel Esber | last post by:
People, Environment: Linux AS4 I have just installed db2 v9.5 + Fixpak 2 on a machine that has db2 v8 up and running, but I am unable to create and instance: # ./db2icrt -a SERVER -p...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.