View mode: basic / threaded / horizontal-split · Log in · Help
May 11, 2012
What is a good strategy for finding undefined symbols...
I've been trying to compile the DerelictGL and finally got it to 
compile cleanly. But now the linker is complaining.

I've been "searching" for hours for these definitions and I feel 
like I've just been going around in circles.

What is a novice to do?   Is this just something I am supposed to 
know before hand?


C:\D\dmd2\windows\bin\link.exe gl,,nul,user32+kernel32/noi;
OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
gl.obj(gl)
 Error 42: Symbol Undefined __d_framehandler
gl.obj(gl)
 Error 42: Symbol Undefined __d_throwc
gl.obj(gl)
 Error 42: Symbol Undefined __tls_array
gl.obj(gl)
 Error 42: Symbol Undefined 
_D8derelict4util7wrapper9toDStringFPaZAa
gl.obj(gl)
 Error 42: Symbol Undefined _D9Exception7__ClassZ
gl.obj(gl)
 Error 42: Symbol Undefined _glGetString
gl.obj(gl)
 Error 42: Symbol Undefined 
_D8derelict4util7wrapper7findStrFAaAaZi
gl.obj(gl)
 Error 42: Symbol Undefined _wglGetCurrentContext
gl.obj(gl)
 Error 42: Symbol Undefined _D11TypeInfo_Aa6__initZ
gl.obj(gl)
 Error 42: Symbol Undefined 
_D8derelict4util9exception17DerelictException7__ClassZ
gl.obj(gl)
 Error 42: Symbol Undefined __d_arraycatnT
gl.obj(gl)
 Error 42: Symbol Undefined _D12TypeInfo_Aya6__initZ
gl.obj(gl)
May 11, 2012
Re: What is a good strategy for finding undefined symbols...
On May 11, 2012, at 1:56 PM, WhatMeWorry wrote:

> I've been trying to compile the DerelictGL and finally got it to compile cleanly. But now the linker is complaining.
> 
> I've been "searching" for hours for these definitions and I feel like I've just been going around in circles.
> 
> What is a novice to do?   Is this just something I am supposed to know before hand?
> 
> 
> C:\D\dmd2\windows\bin\link.exe gl,,nul,user32+kernel32/noi;
> OPTLINK (R) for Win32  Release 8.00.12
> Copyright (C) Digital Mars 1989-2010  All rights reserved.
> http://www.digitalmars.com/ctg/optlink.html
> gl.obj(gl)
> Error 42: Symbol Undefined __d_framehandler
> gl.obj(gl)
> Error 42: Symbol Undefined __d_throwc

_d_anything will be defined in Druntime, which is bundled into the Phobos library.  Maybe your library path is wrong and DMD can't find Phobos?


> gl.obj(gl)
> Error 42: Symbol Undefined __tls_array

I think the compiler generates this.  It'd a Druntime thing also.


> gl.obj(gl)
> Error 42: Symbol Undefined _D8derelict4util7wrapper9toDStringFPaZAa

derelict.wrapper.toDString(blah)

Feed mangled names into core.demangle to get a readable string.

> gl.obj(gl)
> Error 42: Symbol Undefined _D9Exception7__ClassZ
> gl.obj(gl)
> Error 42: Symbol Undefined _glGetString
> gl.obj(gl)
> Error 42: Symbol Undefined _D8derelict4util7wrapper7findStrFAaAaZi
> gl.obj(gl)
> Error 42: Symbol Undefined _wglGetCurrentContext

Not linking OpenGL maybe?


> gl.obj(gl)
> Error 42: Symbol Undefined _D11TypeInfo_Aa6__initZ
> gl.obj(gl)
> Error 42: Symbol Undefined _D8derelict4util9exception17DerelictException7__ClassZ
> gl.obj(gl)
> Error 42: Symbol Undefined __d_arraycatnT
> gl.obj(gl)
> Error 42: Symbol Undefined _D12TypeInfo_Aya6__initZ
> gl.obj(gl)

Mostly Druntime again.
May 12, 2012
Re: What is a good strategy for finding undefined symbols...
On 12.05.2012 0:56, WhatMeWorry wrote:
> I've been trying to compile the DerelictGL and finally got it to compile
> cleanly. But now the linker is complaining.
>
> I've been "searching" for hours for these definitions and I feel like
> I've just been going around in circles.
>
> What is a novice to do? Is this just something I am supposed to know
> before hand?
>

Looks like you are trying to link. Libraries are not linked they are 
just compiled. Then object files are put together into library file.
Link produces *executable* (yeah I recall that was hard to get at first).
>
> C:\D\dmd2\windows\bin\link.exe gl,,nul,user32+kernel32/noi;
> OPTLINK (R) for Win32 Release 8.00.12
> Copyright (C) Digital Mars 1989-2010 All rights reserved.
> http://www.digitalmars.com/ctg/optlink.html
> gl.obj(gl)
> Error 42: Symbol Undefined __d_framehandler
> gl.obj(gl)
> Error 42: Symbol Undefined __d_throwc
> gl.obj(gl)
> Error 42: Symbol Undefined __tls_array
> gl.obj(gl)
> Error 42: Symbol Undefined _D8derelict4util7wrapper9toDStringFPaZAa
> gl.obj(gl)
> Error 42: Symbol Undefined _D9Exception7__ClassZ
> gl.obj(gl)
> Error 42: Symbol Undefined _glGetString
> gl.obj(gl)
> Error 42: Symbol Undefined _D8derelict4util7wrapper7findStrFAaAaZi
> gl.obj(gl)
> Error 42: Symbol Undefined _wglGetCurrentContext
> gl.obj(gl)
> Error 42: Symbol Undefined _D11TypeInfo_Aa6__initZ
> gl.obj(gl)
> Error 42: Symbol Undefined
> _D8derelict4util9exception17DerelictException7__ClassZ
> gl.obj(gl)
> Error 42: Symbol Undefined __d_arraycatnT
> gl.obj(gl)
> Error 42: Symbol Undefined _D12TypeInfo_Aya6__initZ
> gl.obj(gl)


-- 
Dmitry Olshansky
May 12, 2012
Re: What is a good strategy for finding undefined symbols...
> Looks like you are trying to link. Libraries are not linked 
> they are just compiled. Then object files are put together into 
> library file.
> Link produces *executable* (yeah I recall that was hard to get 
> at first).
>>

Wait, isn't that the whole point of libraries, that they are 
pre-compiled? Linking just resolves their addresses?

Anyway, I set the LIB environment variable to point to where my 
druntime and phobos libraries (with absolute paths even) like so:

set LIB=C:\D\dmd2\src\druntime\lib;C:\D\dmd2\src\phobos

but when I redo the link step,I am still seening the undefined 
symbols like in my original posting.

I love programming, but I hate building. Is this what Andrei 
means by code for "being" as opposed to code for "doing:.
May 12, 2012
Re: What is a good strategy for finding undefined symbols...
On Sat, May 12, 2012 at 12:22 PM, WhatMeWorry <kc_heaser@yahoo.com> wrote:

>  Looks like you are trying to link. Libraries are not linked they are just
>> compiled. Then object files are put together into library file.
>> Link produces *executable* (yeah I recall that was hard to get at first).
>>
>>>
>>>
> Wait, isn't that the whole point of libraries, that they are pre-compiled?
> Linking just resolves their addresses?
>

Yes and no. You have to link *dynamic* libraries to resolve addresses, but
you're dealing with a static library. "Static library" is to some extent a
misnomer because you don't link them at all; they're basically a bunch of
object files thrown into an archive file. Addresses get resolved when you
link an executable and all those object files get included from inside the
archive.


> Anyway, I set the LIB environment variable to point to where my druntime
> and phobos libraries (with absolute paths even) like so:
>
> set LIB=C:\D\dmd2\src\druntime\**lib;C:\D\dmd2\src\phobos
>
> but when I redo the link step,I am still seening the undefined symbols
> like in my original posting.
>
> I love programming, but I hate building. Is this what Andrei means by code
> for "being" as opposed to code for "doing:.
>
>
One of the downsides of native compilation is that the toolchain is a much
more complex system than it is with VM languages (and interpreted languages
don't need a toolchain at all).

Unfortunately, I use GDC on Windows and Linux, so I can't tell you exactly
the command to create a static library with DMD, but I can tell you that
you don't need to invoke optlink.
May 13, 2012
Re: What is a good strategy for finding undefined symbols...
On 5/13/2012 2:22 AM, WhatMeWorry wrote:
>> Looks like you are trying to link. Libraries are not linked they are
>> just compiled. Then object files are put together into library file.
>> Link produces *executable* (yeah I recall that was hard to get at first).
>>>
>
> Wait, isn't that the whole point of libraries, that they are
> pre-compiled? Linking just resolves their addresses?
>
> Anyway, I set the LIB environment variable to point to where my druntime
> and phobos libraries (with absolute paths even) like so:
>
> set LIB=C:\D\dmd2\src\druntime\lib;C:\D\dmd2\src\phobos
>
> but when I redo the link step,I am still seening the undefined symbols
> like in my original posting.
>
> I love programming, but I hate building. Is this what Andrei means by
> code for "being" as opposed to code for "doing:.
>
>

Linking happens when you build an executable. If you are building just 
the libraries, there is no linking done at all. To compile DerelictGL, 
you do not need to link anything.

It appears you are compiling Derelict 2, in which case the supplied 
makefiles should do everything necessary to build the libraries:

make -fwin32.mak

Are you having difficulties with that?
May 14, 2012
Re: What is a good strategy for finding undefined symbols...
>>
>
> Linking happens when you build an executable. If you are 
> building just the libraries, there is no linking done at all. 
> To compile DerelictGL, you do not need to link anything.
>
> It appears you are compiling Derelict 2, in which case the 
> supplied makefiles should do everything necessary to build the 
> libraries:
>
> make -fwin32.mak
>
> Are you having difficulties with that?

Well, the derelict page at:

http://www.dsource.org/projects/derelict

doesn't even mention a make file. It talks about "dmd -run
build.me"

But I got all sorts of compiler errors with buildme.d  And this
page mentions Bud, Rebuild, and DSSS. Makes my head spin.

I'm going to trying downloading derelict again and trying your
make command suggestion.

wish there was a "walk through" for beginners.

Thanks.

(I see there is a derelict forum so I'll go there as well)
May 15, 2012
Re: What is a good strategy for finding undefined symbols...
On 5/15/2012 4:23 AM, WhatMeWorry wrote:
>>>
>>
>> Linking happens when you build an executable. If you are 
>> building just the libraries, there is no linking done at all. 
>> To compile DerelictGL, you do not need to link anything.
>>
>> It appears you are compiling Derelict 2, in which case the 
>> supplied makefiles should do everything necessary to build the 
>> libraries:
>>
>> make -fwin32.mak
>>
>> Are you having difficulties with that?
> 
> Well, the derelict page at:
> 
> http://www.dsource.org/projects/derelict
> 
> doesn't even mention a make file. It talks about "dmd -run
> build.me"

If you look at the Derelict 2 section near the top of that page,
you'll see the very last sentence says:

"The rest of the information on this page relates to Derelict1."

That means everything about buildme.d, DSSS, bud and so on are
all for Derelict 1, not Derelict 2. I suppose this is my fault
for assuming people would read the whole page and for not having
updated the Wiki since then to remove the Derelict 1 stuff.

Also, in that very same Derelict 2 section, is the following:

Work has begun on the documentation, which you can view online
at:
http://svn.dsource.org/projects/derelict/branches/Derelict2/doc/index.html

On that front documentation page, there is a section called
"General Facts you Need to Know". The very first item in that
list is "How to build Derelict", where 'build' is a link to the
page that explains how to compile the libraries. The next item in
the list tells you how to make use of Derelict in your programs.

You also get that very same documentation when you checkout or
download the Derelict 2 branch from SVN. It lives in the 'doc'
subdirectory.

Of course, I'm assuming you're using Derelict 2 since you say you
did get it to compile. Derelict 1 won't compile at all with D2,
it's D1 only. Derelict 2 is at
http://svn.dsource.org/projects/derelict/branches/Derelict2

If that's what you're using, then everything I said here applies.
If you're using the trunk, which is Derelict 1, stop and use the
Derelict 2 branch.
May 16, 2012
Re: What is a good strategy for finding undefined symbols...
On Tuesday, 15 May 2012 at 05:35:35 UTC, Michael Parker wrote:
> On 5/15/2012 4:23 AM, WhatMeWorry wrote:
>>>>
>>>
>>> Linking happens when you build an executable. If you are 
>>> building just the libraries, there is no linking done at all. 
>>> To compile DerelictGL, you do not need to link anything.
>>>
>>> It appears you are compiling Derelict 2, in which case the 
>>> supplied makefiles should do everything necessary to build 
>>> the libraries:
>>>
>>> make -fwin32.mak
>>>
>>> Are you having difficulties with that?
>> 
>> Well, the derelict page at:
>> 
>> http://www.dsource.org/projects/derelict
>> 
>> doesn't even mention a make file. It talks about "dmd -run
>> build.me"
>
> If you look at the Derelict 2 section near the top of that page,
> you'll see the very last sentence says:
>
> "The rest of the information on this page relates to Derelict1."
>
> That means everything about buildme.d, DSSS, bud and so on are
> all for Derelict 1, not Derelict 2. I suppose this is my fault
> for assuming people would read the whole page and for not having
> updated the Wiki since then to remove the Derelict 1 stuff.
>
> Also, in that very same Derelict 2 section, is the following:
>
> Work has begun on the documentation, which you can view online
> at:
> http://svn.dsource.org/projects/derelict/branches/Derelict2/doc/index.html
>
> On that front documentation page, there is a section called
> "General Facts you Need to Know". The very first item in that
> list is "How to build Derelict", where 'build' is a link to the
> page that explains how to compile the libraries. The next item 
> in
> the list tells you how to make use of Derelict in your programs.
>
> You also get that very same documentation when you checkout or
> download the Derelict 2 branch from SVN. It lives in the 'doc'
> subdirectory.
>
> Of course, I'm assuming you're using Derelict 2 since you say 
> you
> did get it to compile. Derelict 1 won't compile at all with D2,
> it's D1 only. Derelict 2 is at
> http://svn.dsource.org/projects/derelict/branches/Derelict2
>
> If that's what you're using, then everything I said here 
> applies.
> If you're using the trunk, which is Derelict 1, stop and use the
> Derelict 2 branch.

I'm just going start from scratch. However, this might be a real 
beginner question, but when I go to the 
ttp://svn.dsource.org/projects/derelict/branches/Derelict2 link, 
I see

Revision 630: /branches/Derelict2
..
DerelictAL/
DerelictAllegro/
DerelictFMOD/
DerelictFT/
DerelictGL/
DerelictIL/
DerelictODE/
DerelictOgg/
DerelictPA/
DerelictSDL/
DerelictSFML/
DerelictUtil/
dgl.d
doc/
dsss.conf
import/
inc/
lib/
linux.mak
mac.mak
project/
win32.mak

--------------------------------------------------------------------------------
Powered by Subversion version 1.4.5 (r25188).

So now what? I've never used version control software before. Do 
I need to download a subversion client?

Thanks for all the help. Derelict is a great project.
May 16, 2012
Re: What is a good strategy for finding undefined symbols...
On 5/16/2012 10:15 AM, WhatMeWorry wrote:

>
> I'm just going start from scratch. However, this might be a real
> beginner question, but when I go to the
> ttp://svn.dsource.org/projects/derelict/branches/Derelict2 link, I see
>
> Revision 630: /branches/Derelict2
> ..
> DerelictAL/
> DerelictAllegro/
> DerelictFMOD/
> DerelictFT/
> DerelictGL/
> DerelictIL/
> DerelictODE/
> DerelictOgg/
> DerelictPA/
> DerelictSDL/
> DerelictSFML/
> DerelictUtil/
> dgl.d
> doc/
> dsss.conf
> import/
> inc/
> lib/
> linux.mak
> mac.mak
> project/
> win32.mak
>
> --------------------------------------------------------------------------------
>
> Powered by Subversion version 1.4.5 (r25188).
>
> So now what? I've never used version control software before. Do I need
> to download a subversion client?

That particular URL isn't really meant for browsing. It is meant to be 
used by a Subversion client to checkout the source. However, if you 
don't want to do that at this point, then you can go to the source 
browser[1] and download a zip file.

[1] http://www.dsource.org/projects/derelict/browser/branches/Derelict2

This is the web interface to the repository. There, at the bottom of the 
page, you'll see a link "Zip Archive". Clicking that will auto-generate 
a zip file that will then download. Once you extract that, you'll wind 
up with the source tree in a directory with a long name. I suggest you 
rename it to 'derelict'.

Next, you need to make sure DMD is on your path. Then you can open up a 
command prompt and follow the directions in the Derelict docs for 
compilation.

If you need help beyond that point, please ask over in the Derelict 
forum and I'll see what I can do to assist.


>
> Thanks for all the help. Derelict is a great project.
>
>
>
Top | Discussion index | About this forum | D home