Files
b2txt25/language_model/srilm-1.7.3/doc/c++porting-notes
2025-07-02 12:18:09 -07:00

48 lines
1.4 KiB
Plaintext

C++ porting notes
-----------------
I originally wrote this code using gcc/g++ as the compiler.
Below is a list of changes I had to make to accomodate SGI, Sun and Intel C++
compilers.
o Explicitly instantiate templates only in g++ (#ifdef __GNUG__).
o Avoid global static data referenced by template code. These symbols
become undefined in the instantiated template functions.
I use local static data, or global extern data instead (the latter
#ifndef __GNUG__).
o Avoid non-static inline functions in templates (.cc files). They
don't get properly instantiated by Sun CC and result in undefined
symbols.
o Use Sun CC -xar option to build libraries. This includes needed
template instances in the library (see the new $(ARCHIVE) macro to
refer to the appropriate archive command).
o To work around an internal compiler error in gcc 2.7.2, I had to
add empty destructors in a few classes. Howver, I no longer use gcc 2.7.2
in testing, so current version are no longer guaranteed to work with it.
o Intel C++ doesn't support arrays of non-POD objects on the stack. I had
to replace those with matching calls to new/delete.
Compilers that work
-------------------
(as of last checking, meaning current versions may not work out of the box)
+ gcc/g++ 2.8.1, 2.95.3, 3.2 and 3.3
+ Sun SC4.0
+ SGI NCC
+ Intel C++ 7.1
Compilers that don't work on this code
--------------------------------------
- Sun SC3.0.1
- CenterLine (Sun version, as of 6/96)