View mode: basic / threaded / horizontal-split · Log in · Help
September 13, 2005
Another question about making a .lib file
I'm trying to make a .lib from a .d file (which is basically a header to a .dll)
but there seem to be some functions that are being ignored and not included in
the final .lib. (This is verified by looking at the .lst.)

Specifically, I have the sdl_mixer.dll from libsdl.org and the file sdl_mixer.d
from D-Porting. I ran 'dmd -c SDL_mixer.d' to make the .obj then 'lib -c -l
sdl_mixer sdl_mixer.obj' to make the lib. There are functions missing from the
lst that are then mentioned by the linker when I compile a simple program using
sdl_mixer.lib. I noticed that the functions that are missing all seem to be
prototypes.

Is there a flag to keep prototyped functions? Or one to include the .dll in the
process so the .lib symbol can point to the .dll?

Thanks,
Triften Chmil

P.S. Sorry if this is posted twice.
September 13, 2005
Re: Another question about making a .lib file
"Triften Chmil" <Triften_member@pathlink.com> wrote in message 
news:dg6elb$14vf$1@digitaldaemon.com...
> I'm trying to make a .lib from a .d file (which is basically a header to a 
> .dll)
> but there seem to be some functions that are being ignored and not 
> included in
> the final .lib. (This is verified by looking at the .lst.)
>
> Specifically, I have the sdl_mixer.dll from libsdl.org and the file 
> sdl_mixer.d
> from D-Porting. I ran 'dmd -c SDL_mixer.d' to make the .obj then 
> 'lib -c -l
> sdl_mixer sdl_mixer.obj' to make the lib. There are functions missing from 
> the
> lst that are then mentioned by the linker when I compile a simple program 
> using
> sdl_mixer.lib. I noticed that the functions that are missing all seem to 
> be
> prototypes.
>
> Is there a flag to keep prototyped functions? Or one to include the .dll 
> in the
> process so the .lib symbol can point to the .dll?
>
> Thanks,
> Triften Chmil

Wait a second.  You might have to ignore my other post.

Why are you trying to make the header file into a lib?  Isn't there already 
an accompanying sdl_mixer.lib?  If there's a DLL and a header, there's most 
likely already an "import library,"  which is a .lib file that just tells 
the compiler in what DLL to look for the function.
September 14, 2005
Re: Another question about making a .lib file
In article <dg7n2c$2e2u$1@digitaldaemon.com>, Jarrett Billingsley says...
>
>"Triften Chmil" <Triften_member@pathlink.com> wrote in message 
>news:dg6elb$14vf$1@digitaldaemon.com...
>> I'm trying to make a .lib from a .d file (which is basically a header to a 
>> .dll)
>> but there seem to be some functions that are being ignored and not 
>> included in
>> the final .lib. (This is verified by looking at the .lst.)
>>
>> Specifically, I have the sdl_mixer.dll from libsdl.org and the file 
>> sdl_mixer.d
>> from D-Porting. I ran 'dmd -c SDL_mixer.d' to make the .obj then 
>> 'lib -c -l
>> sdl_mixer sdl_mixer.obj' to make the lib. There are functions missing from 
>> the
>> lst that are then mentioned by the linker when I compile a simple program 
>> using
>> sdl_mixer.lib. I noticed that the functions that are missing all seem to 
>> be
>> prototypes.
>>
>> Is there a flag to keep prototyped functions? Or one to include the .dll 
>> in the
>> process so the .lib symbol can point to the .dll?
>>
>> Thanks,
>> Triften Chmil
>
>Wait a second.  You might have to ignore my other post.
>
>Why are you trying to make the header file into a lib?  Isn't there already 
>an accompanying sdl_mixer.lib?  If there's a DLL and a header, there's most 
>likely already an "import library,"  which is a .lib file that just tells 
>the compiler in what DLL to look for the function. 
>

I suppose this is the part where I realize that the .lib (that I got with the
dll) that was causing me trouble is compiled with a MS compiler therefore
making it a different format. In that case, would I just need to recompile the
source code for sdl_mixer.dll with a different compiler to get a useable .lib?


Thanks,
Triften Chmil
September 14, 2005
Re: Another question about making a .lib file
"Triften Chmil" <Triften_member@pathlink.com> wrote in message 
news:dg91cp$pqc$1@digitaldaemon.com...
> I suppose this is the part where I realize that the .lib (that I got with 
> the
> dll) that was causing me trouble is compiled with a MS compiler therefore
> making it a different format. In that case, would I just need to recompile 
> the
> source code for sdl_mixer.dll with a different compiler to get a useable 
> .lib?

Nope, just use implib on the sdl_mixer.dll to generate a D-compatible import 
library.  Implib is part of the Digital Mars Basic Utilities package, 
available here: http://ftp.digitalmars.com/bup.zip

If you're linking in the new import library and you're _still_ getting 
undefined references, it might be a matter of setting up a .def file.
September 15, 2005
.lib file for sdl_mixer
In article <dg9id2$1css$1@digitaldaemon.com>, Jarrett Billingsley says...
>
>"Triften Chmil" <Triften_member@pathlink.com> wrote in message 
>news:dg91cp$pqc$1@digitaldaemon.com...
>> I suppose this is the part where I realize that the .lib (that I got with 
>> the
>> dll) that was causing me trouble is compiled with a MS compiler therefore
>> making it a different format. In that case, would I just need to recompile 
>> the
>> source code for sdl_mixer.dll with a different compiler to get a useable 
>> .lib?
>
>Nope, just use implib on the sdl_mixer.dll to generate a D-compatible import 
>library.  Implib is part of the Digital Mars Basic Utilities package, 
>available here: http://ftp.digitalmars.com/bup.zip
>
>If you're linking in the new import library and you're _still_ getting 
>undefined references, it might be a matter of setting up a .def file. 
>
>

Still getting undefined symbol errors.
The text of the function name is in the .dll. Is implib just unable to pull out
those functions for some reason?

Has anyone here been able to use sdl_mixer under D (in windows)?

Thanks again,
Triften Chmil
September 15, 2005
.lib file for sdl_mixer (A few more details)
Just to give you as much information as I can:

I've got a small soundtest.d file with "import SDL; import SDL_mixer" at the top
that does the bare minimum of functions to play a WAV (initialize sound, load
the sound, play it and wait for it to finish before closing.) Then I have an
sdl_mixer.d from D-Porting that lists the functions that are in the .dll. I have
the .lib file from running implib on sdl_mixer.dll. (I also have the .lib from
the sdl_mixer_dev zip file but that's COFF.)

Finally a small shell script:
DMD=\dmd\bin\dmd
INC=-I\d\sdl -I\d\opengl
LIBS=sdl.lib opengl32.lib glu32.lib sdl_mixer.lib

$(DMD) soundtest.d $(INC) $(LIBS)
(END script)

Running that gives me those undefined symbol errors.

Should I include "sdl_mixer.d" amoing the files to compile? Or is there
something else I should do to get a proper .lib file? (Again, the .lib file
seems to be missing a few important functions that are in the .dll and the COFF
lib file.)

The original .lib is 15k, the implib version is 8k, and the coff2omf version is
6k.

-Triften Chmil
September 15, 2005
Re: .lib file for sdl_mixer (A few more details)
Triften Chmil wrote:

> Should I include "sdl_mixer.d" amoing the files to compile? Or is there
> something else I should do to get a proper .lib file? (Again, the .lib file
> seems to be missing a few important functions that are in the .dll and the COFF
> lib file.)

sdl_mixer.d should be imported as a 'header', but need not be compiled 
in as long as you are linking to a proper import lib. Perhaps your 
import lib is corrupt?

This won't solve your immediate problem of linking to the import lib, 
but as a workaround it bypasses the need for it. You might consider 
using Derelict (http://www.dsource.org/projects/derelict/). Derelict 
allows you to avoid linking with any C import libs. You link with 
Derelict's D libs instead. The Derelict packages load the appropriate 
shared lib files (DLLs on Windows and so files on Linux) dynamically at 
runtime. The project includes several SDL library loaders (SDL and 
SDL_mixer amongst them) and also OpenGL, OpenAL, and more.

If you do use Derelict, you will need a Subversion client to check out 
the trunk from the repository. If you've never used subversion, there 
are links from the project page that lead to the information you need to 
do so (it's quite simple really). I also suggest browsing the Derelict 
forums (again linked from the project page) to get an idea of what you 
need to check out and what the project is about.
September 15, 2005
Re: .lib file for sdl_mixer (A few more details)
"Triften Chmil" <Triften_member@pathlink.com> wrote in message 
news:dgas58$2o2h$1@digitaldaemon.com...
> Should I include "sdl_mixer.d" amoing the files to compile? Or is there
> something else I should do to get a proper .lib file? (Again, the .lib 
> file
> seems to be missing a few important functions that are in the .dll and the 
> COFF
> lib file.)

The implib'ed lib is missing the functions?  Do you mean that you dumped a 
list of the functions from each library and the list was shorter for the 
implib'ed file?  Or just that it's giving undefined references?

You might be able to circumvent having to use the implib'ed lib at all, by 
instead using a module definition file.  It's a little more work, but it's 
not that bad.  I'll have to know a few things, first, though:

1) When the linker says that there is an undefined reference, what does say 
it's looking for?  For example, if there's a function "sdl_mixer_init", does 
it look for "_sdl_mixer_init"?

2) What is the actual name of the function in the DLL?  Is it just 
"sdl_mixer_init", or maybe "sdl_mixer_init@8", or something horrendous like 
"??sdl_mixer_init@@YAXPAXZ" ?

What you can do with a module definition file is kind of set up aliases for 
the linker, so that it'll remap the function names that it's looking for to 
the actual name in the DLL.
Top | Discussion index | About this forum | D home