[SRILM User List] Compiling srilm with gcc 4.6.1 (and possibly any versions >= 4.3): patched Lattice sources
Andreas Stolcke
stolcke at icsi.berkeley.edu
Wed May 16 16:06:09 PDT 2012
This was previously reported at
http://www.speech.sri.com/pipermail/srilm-user/2012q2/001197.html .
The current (not yet released) code in Array.h has
#if !defined(DEBUG) && defined(__GNUC__) && !defined(__clang__) &&
(!defined(__INTEL_COMPILER) || __INTEL_COMPILER >=900)
and that should take care of your problem.
Andreas
On 5/16/2012 3:49 PM, Edward Thomas Grefenstette wrote:
> After further investigation, it turns out you are correct. I was also
> having compilation problems with apple's llvm-gcc 4.2 (on an older
> system), which I would not encounter if I explicitly asked to use the
> non-apple non-llvm-based g++-4.2 on the same system.
>
> The fault lies with the llvm-gcc/clang not liking the non-static
> definition in srlim/dstruct/src/Array.h:
>
> #if !defined(DEBUG) && defined(__GNUC__) &&
> (!defined(__INTEL_COMPILER) || __INTEL_COMPILER >=900)
> # define makeArray(T, A, n)T A[n]
> #else
> # define makeArray(T, A, n)StaticArray<T> A(n)
> #endif
>
> The first option (T A[n]) is selected for llvm-gcc, when in fact it
> should be the second.
>
> If you I replace the whole section above in Array.h with the following
> line
>
> #if !defined(DEBUG) && defined(__GNUC__) &&
> (!defined(__INTEL_COMPILER) || __INTEL_COMPILER >=900) &&
> !defined(__llvm__)
>
> then srlim compiles fine with llvm-gcc-4.x, without need for
> modification of LatticeIndex.cc and LatticeNgrams.cc, as it correctly
> detects llvm-gcc or clang which do not generally support variable
> length arrays <http://clang.llvm.org/compatibility.html#vla>, and
> defines makearray appropriately.
>
> How do I submit a patch?
>
> Best,
> Ed
>
> On 16 May 2012, at 19:05, Andreas Stolcke wrote:
>
>> On 5/16/2012 9:25 AM, Edward Grefenstette wrote:
>>> Dear srilm users,
>>>
>>> As mentioned in another email, I've encountered and later resolved
>>> some problems building srilm with gcc v4.6
>>> <http://stackoverflow.com/questions/10606983/problems-installing-srilm-on-os-x-10-7>.
>>> The fault, it seems, lays with the makearray declarations used
>>> in LatticeIndex.cc and LatticeNgrams.cc found in ./lattice/src/ of
>>> the srilm folder.
>>>
>>> I've managed to get srilm to compile by "cheating" and using an
>>> older version of g++ passed to make with CXX flag, but ideally it'd
>>> be better to fix the source to be compliant with C++0x, as enforced
>>> by gcc versions >= 4.3 (I think).
>>>
>>> I attach to this email the modified LatticeIndex.cc
>>> and LatticeNgrams.cc files from srilm 1.6.0 (diffs reproduced at the
>>> end of the email), which allowed me to compile srilm using gcc 4.6.1
>>> without passing an older g++ using the CXX flag. Could someone
>>> please sanity check the changes? If they're good, it'd be nice to
>>> see these files updated in the main distribution so that others
>>> don't encounter this frustrating problem when they update their
>>> compilers and decide to (re)build srilm.
>> SRILM compiles fine on gcc 4.5.x, which is the latest version I've
>> verified myself.
>>
>> It is possible that gcc 4.6.x changed (removed) the support for
>> stack-allocated arrays with size computed at run-time, to be inline
>> with standard C++. In that case a simple change in Array.h (the
>> conditional definition of makeArray()) should suffice.
>>
>> I will try to get my hands on gcc 4.6.x to verify this, but feel free
>> to submit a patch along those lines.
>>
>> Andreas
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.speech.sri.com/pipermail/srilm-user/attachments/20120516/8983bff3/attachment.html>
More information about the SRILM-User
mailing list