Thread overview
Linking order on Linux matters?
Nov 25, 2013
Jeremy DeHaan
Nov 25, 2013
Dmitry Olshansky
Nov 25, 2013
Antoche
Nov 25, 2013
Jeremy DeHaan
Nov 26, 2013
Mike Parker
November 25, 2013
Hey all,

New to Linux, so I wanted to double check something. I have a C shared library and a D static library. The D static library uses functions from the C library. On Windows, it didn't matter what order I linked the .libs in and it always compiled fine. On Linux, however, I have to link the static library first and then the shared library or else I get undefined symbols for each extern(C) function I declare in my D code. Is this normal for Linux or is it a compiler bug?

Thanks!
November 25, 2013
25-Nov-2013 22:19, Jeremy DeHaan пишет:
> Hey all,
>
> New to Linux, so I wanted to double check something. I have a C shared
> library and a D static library. The D static library uses functions from
> the C library. On Windows, it didn't matter what order I linked the
> .libs in and it always compiled fine. On Linux, however, I have to link
> the static library first and then the shared library or else I get
> undefined symbols for each extern(C) function I declare in my D code.
> Is
> this normal for Linux or is it a compiler bug?
>
AFAIK it's was a somewhat (a couple of years?) recent change but yes, it's the norm on Linux now.

> Thanks!


-- 
Dmitry Olshansky
November 25, 2013
On Monday, 25 November 2013 at 18:19:57 UTC, Jeremy DeHaan wrote:
> Hey all,
>
> New to Linux, so I wanted to double check something. I have a C shared library and a D static library. The D static library uses functions from the C library. On Windows, it didn't matter what order I linked the .libs in and it always compiled fine. On Linux, however, I have to link the static library first and then the shared library or else I get undefined symbols for each extern(C) function I declare in my D code. Is this normal for Linux or is it a compiler bug?
>
> Thanks!

Order matters, no matter the language. See
http://stackoverflow.com/a/409470/1924406
November 25, 2013
On Monday, 25 November 2013 at 20:29:19 UTC, Antoche wrote:
> On Monday, 25 November 2013 at 18:19:57 UTC, Jeremy DeHaan wrote:
>> Hey all,
>>
>> New to Linux, so I wanted to double check something. I have a C shared library and a D static library. The D static library uses functions from the C library. On Windows, it didn't matter what order I linked the .libs in and it always compiled fine. On Linux, however, I have to link the static library first and then the shared library or else I get undefined symbols for each extern(C) function I declare in my D code. Is this normal for Linux or is it a compiler bug?
>>
>> Thanks!
>
> Order matters, no matter the language. See
> http://stackoverflow.com/a/409470/1924406

Thanks!

That's a great link. It cleared up quite a lot.
November 26, 2013
On Monday, 25 November 2013 at 23:25:05 UTC, Jeremy DeHaan wrote:

>>
>> Order matters, no matter the language. See
>> http://stackoverflow.com/a/409470/1924406
>
> Thanks!
>
> That's a great link. It cleared up quite a lot.

Note that this also applies to Windows with MinGW (and, I assume, Cygwin). It's a GCC thing, not a Linux thing. So I would assume it would arise when using LDC and GDC.