28

While running a makefile in gcc 4.1.2 (linux 5), I got the following error

make: yacc: Command not found

By googling, I came to know that this error can be rectified by installing Bison-GNU parser generator. But even after installing Bison, I get the same error.

How can this error be solved?

Blackforest
  • 1,009
  • 2
  • 11
  • 18
  • What OS are you under? Sounds like some linux distro, but I'm not sure which. Also, that error is pretty self-explanatory: what happens when you run `whereis yacc`? – zebediah49 May 24 '12 at 07:48
  • the output of whereis yacc is yacc: /usr/share/man/man1p/yacc.1p.gz – Blackforest May 24 '12 at 07:50
  • That's a compressed man page, not an executable. – paxdiablo May 24 '12 at 07:53
  • That means that your $PATH does not include the yacc executable-- that's just its manual page. I'd suggest trying to find where `yacc` is, and finding why it's not on your $PATH. This is more of a ServerFault or SuperUser question BTW. – zebediah49 May 24 '12 at 07:56

4 Answers4

48

Run the following command on your terminal to install bison, yacc executables and configurations.yacc comes along with bison

Also you need byacc for a full functional yacc

sudo apt-get install bison -y
sudo apt-get install byacc -y

It worked for me.

Julius Moshiro
  • 660
  • 1
  • 6
  • 10
15

From the looks of things, your makefile is expecting a yacc executable to be available and either it's not, or it's not on your path.

Since bison is supposed to be compatible with yacc so the first thing I would try would be:

alias yacc="bison"

and try again. On my setup, /usr/bin/yacc is simply a script containing:

#! /bin/sh
exec '/usr/bin/bison' -y "$@"

You can try to locate the yacc or bison executables with the command (substituting bison for yacc if need be):

which yacc

But they're probably in one of the standard places like /bin or /usr/bin.

paxdiablo
  • 854,327
  • 234
  • 1,573
  • 1,953
  • I would suggest seeing if `bison` exists first, but yes, good to know. – zebediah49 May 24 '12 at 07:56
  • yes Bison exists. The output of "which bison" command is "/usr/bin/bison". But even after giving "alias yacc="bison", I get the same error. – Blackforest May 24 '12 at 08:09
  • Then the alias is probably disappearing, or it's using a shell that doesn't have aliases. If `which yacc` does not turn up a valid executable, create your own `/usr/bin/yacc` executable along the lines of the one given in the answer. If _that_ doesn't work then your makefile is almost certainly not seeing `/usr/bin` when it's running. – paxdiablo May 24 '12 at 08:10
  • Well, the alias works fine. "which yaac" gives "alias yacc='bison' /usr/bin/bison". The error has been resolved. Thanks paxdibolo. – Blackforest May 24 '12 at 08:24
1

I ran into a similar issue on RHEL7.

Find where bison is:

$:which bison

*/bin/bison*

Create symlink to bison from yacc:

sudo ln -s /bin/bison /bin/yacc

And that should solve the problem.

Randolph Abeyta
  • 424
  • 3
  • 8
0

I created the alias file on my Ubuntu 16 system, while testing then I found that bison was missing so I installed bison which gave me an error about the link that I had made for /usr/bin/yacc, so the bison install creates the lnk file itself for yacc on Ubuntu 16.

RKaneKnight
  • 181
  • 2
  • 4