On Friday, 6 December 2013 at 16:54:14 UTC, Jacob Carlborg wrote:
On 2013-12-06 14:25, Mafi wrote:

Thank you! This has helped and I linked my program. As it turned out dmd
invoked gcc to link and it supplied my -ldl argument first! I
copy-pasted that command into a shell and moved the -ldl to the very end
and it worked.

How do instruct dmd to do the same? As far as I understand the problem is that I specified the full path to the Derelict lib files by hand for each lib instead of using -L and -l. Libraries specifed like that are put after the gilen linker flags and before the buitlin ones (-lphobos etc). Is this a bug or is there any reason for dmd's behavior? It seems
very wrong to me.

I would say that linking order shouldn't matter. But for some reason it does. This not really my area of expertise but I know that others have had the same problem. You can try and search the newsgroups for linking order related problems.

So after some tweaking I made it work. Specfying the libpath with -L-L and the actual -L-l invokes gcc correctly. But the other behavior is still odd for me. I mean invoking dmd with

dmd myprog.d /path/to/libSomething.a -L[Linkerflags]

links with

gcc myprog.o [Linkerflags] /path/to/libSomething.a [Phobos]

you must

dmd myprog.d -L-L/path/to/ -l-lSomething

and hope the file name has the format libName.a .

But why? Both are objects. Why seperate them? For me there is no reason to ever want this order!

Reply via email to