[R-SIG-Mac] ld: multiple definitions of symbol

Hadassa Brunschwig hadassa.brunschwig at mail.huji.ac.il
Tue Jan 13 09:34:59 CET 2009

Thanks a lot for your answers! Indeed, I discovered two files with
double statements.


On Tue, Jan 13, 2009 at 10:25 AM, Thomas Lumley
<tlumley at u.washington.edu> wrote:
> On Mon, 12 Jan 2009, Simon Urbanek wrote:
>> On Jan 12, 2009, at 7:59 , Hadassa Brunschwig wrote:
> <snip>
>>> I obtain errors of the sort:
>>> ld: multiple definitions of symbol _ivector
>>> nrutil.o definition of _ivector in section (__TEXT,__text)
>>> tools.o definition of _ivector in section (__TEXT,__text)
>>> I read somewhere that this is due to multiple compilers but I am not
>>> sure about that.
>> No, this is a bug in your code - it's because you have multiple
>> definitions of the same symbol (ivector). If you want the two symbols to be
>> the same across modules, you must declare it external in one of the two
>> files. If you want them separate, declare both static.
> It might be worth pointing out that this is an area where C compilers
> differ. Many compilers permit multiple definitions: if they are the same,
> the behaviour is as if all but one are extern and if they are not the same
> the behaviour is undefined or implementation-defined.  I have read (I don't
> know if it's true) that this handling of multiple definitions was actually
> necessary for the early C++ compilers that compiled to C.
> There's some discussion in the Rationale to the C standard
>  http://www.lysator.liu.se/c/rat/c1.html#3-1-2-2
> Anyway, Simon is right that the Apple gcc demands that there is an extern on
> all but one declaration, and the Standard allows the compiler to demand
> this, and a program written this way will work correctly on compilers that
> have different views, so it's a good way to write.
>     -thomas
> Thomas Lumley                   Assoc. Professor, Biostatistics
> tlumley at u.washington.edu        University of Washington, Seattle

Hadassa Brunschwig
PhD Student
Department of Statistics
The Hebrew University of Jerusalem

More information about the R-SIG-Mac mailing list