[vorbis-dev] Building vorbis - please help
David A. Gatwood
dgatwood at gatwood.net
Mon Jan 29 22:04:44 PST 2001
On Tue, 30 Jan 2001, Michael Smith wrote:
> Most of the rest (the actual errors) are because you're compiling C
> with a C++ compiler. C is NOT a subset of C++, unlike what some people
> seem to think. Don't expect that to work, and don't expect us to work
> around it. Set your compiler to compile as C (if it can't, then your
> compiler is for a language other than what vorbis is written in - we're
> not going to change it to that, just like we wouldn't make changes for
> someone who wanted to compile vorbis with visual basic).
That argument is a rather weak one. C is very, very close to a proper
subset of C++. In early incarnations, it was a proper subset. C++ was
originally a series of C macros. While C++ is no longer expressible in
that way, it is still roughly a superset of C. Thus, well-written C code
should compile with a C++ compiler, with a handful of minor caveats.
First, C++ is particularly picky about casts. An anal-retentive C
compiler could also be that picky if it wanted to be, in most cases.
There's nothing wrong with adding the casts -- no C compiler is going to
complain -- so it seems reasonable to add them.
Those implicit cast warnings are the only problems I had with building ao
and ogg using g++. Vorbis, however, is another story, as it just happens
to hit one of the very tiny places where C isn't a perfect subset,
specifically the C++ notion of "this".
The files lib/codebook.c, lib/sharedbook.c, and about ten files in vq use
a variable called "this". Since that variable has a special meaning in
C++, you have a slight problem. There are two workarounds. The hack is
to add -fthis-is-variable to the command line when compiling these files.
This option exists because "this" has not always been a special variable.
The correct solution, though, is to use a more reasonable variable name.
Since the changes required to make ogg/vorbis build using C++ are so
minor, it seems like a good idea to make them. The "this" fixes are
pretty small, but important. The remaining casts are trivial, but
numerous.
If I can make it build with g++ in half of Roswell, it shouldn't take
someone more than a couple of hours to make all the changes to make it
compile cleanly in C++ as well as C.
Later,
David
---------------------------------------------------------------------
Check out my weekly web comic:
http://www.techmagazine.org
--- >8 ----
List archives: http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'vorbis-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body. No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.
More information about the Vorbis-dev
mailing list