11 July 2010

Re: evilvte compiling error

> Hi, the first time I compile evilvte is OK, and it works fine.
> Then I want to adjust some settings, and I cannot compile it.
> ============================================================
> rm -f src/custom.h src/evilvte.h src/evilvte.o
> cc -march=x86-64 -mtune=generic -O2 -pipe  -pthread
> -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
> -I/usr/include/pango-1.0 -I/usr/include/gtk-2.0
> -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo
> -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0
> -I/usr/include/pixman-1 -I/usr/include/freetype2
> -I/usr/include/libpng14     -c -o src/evilvte.o src/evilvte.c
> cp src/config.h src/custom.h
> sh src/process.sh src/evilvte
> make[1]: warning: jobserver unavailable: using -j1.
>   Add `+' to parent make rule.
> cc -Wl,--hash-style=gnu -Wl,--as-needed src/evilvte.o
> -L/usr/local/lib -lgdk-x11-2.0 -lglib-2.0 -lgobject-2.0
> -lgtk-x11-2.0 -lvte -o src/evilvte
> cc: src/evilvte.o: No such file or directory
> make: *** [evilvte] Error 1
>     Aborting...
> ============================================================
> Solved with reboot.....
> hope this be fixed soon
There are (at least?) three reasons why this might be so:

1) The parent make didn't realize that the child process it was
invoking was actually a "make" program. In this case, it won't
allow the child to connect to the jobserver. This is typically
because the command to invoke the child uses "make" or similar
rather than the correct $(MAKE). See the docs on the "+" token to
understand the algorithm GNU make uses to determine if the child is
a sub-make or not.

Adding the "+" to the invocation in the parent will fix this; hence
the message you got.

2) You have changed your SHELL to use csh or tcsh. These shells are
fundamentally broken and cannot coexist with the jobserver. You
will need to use a different SHELL, preferable a Bourne-compatible
one (sh, ksh, bash, zsh).

3) There is something about the LSF implementation of GNU make that
breaks this: note that for the jobserver to work correctly each
sub-make _MUST_ be a direct fork/exec of its parent. Running them
on remote systems, invoking them from servers, etc. will not work.

I think it is caused by build system of your OS, which should use
$(MAKE) instead of make (or something else).

I suggest you to use the default build system provided by evilvte:
1. go to directory of evilvte
2. make clean ; make

evilvte only need the binary itself, so you may copy the newly built
evilvte to $PATH.

For example:
cp src/evilvte /usr/bin/evilvte

No comments:

Post a Comment