SCons D tool: need help with building static library

H. S. Teoh hsteoh at quickfur.ath.cx
Sat Dec 15 11:19:50 PST 2012


On Sat, Dec 15, 2012 at 06:42:45PM +0000, Russel Winder wrote:
> On Thu, 2012-12-13 at 14:49 -0800, H. S. Teoh wrote:
> > Hi Russel,
> > 
> > I've been using your BitBucket scons_d_tooling version of SCons for
> > my D projects, and it's been great! However, I needed to make a
> > static library today and I'm having some trouble with it.  Here's a
> > reduced testcase:
[...]
[...]
> I entered a variant of your code as a test and made the smallest
> possible change to make things work on Linux. This is untested on OS X
> or Windows.
> 
> The LDC test fails for reasons I cannot suss just now, the DMD and GDC
> tests pass.
> 
> I have no doubt this is a hack patch, it all needs to be sorted
> properly. 
[...]

Thanks! I can build the static library now.

But I have trouble when I try to link to it. For some reason, the dmd
link command isn't picking up the value of LIBPATH, so the linker can't
find the library. Here's a reduced test case:

	#!/usr/src/scons/russel/scons_d_tooling/bootstrap.py -f
	env = Environment(
		DC = '/usr/src/d/dmd/src/dmd',
	)
	env.Library('mylib', 'mylib.d')

	prog_env = env.Clone(
		LIBS = ['mylib'],
		LIBPATH = '#'
	)
	prog_env.Program('prog', 'prog.d')

Output:

	scons: Reading SConscript files ...
	scons: done reading SConscript files.
	scons: Building targets ...
	/usr/src/d/dmd/src/dmd -I. -c -ofmylib.o mylib.d
	ar cr libmylib.a mylib.o
	ranlib libmylib.a
	/usr/src/d/dmd/src/dmd -I. -c -ofprog.o prog.d
	/usr/src/d/dmd/src/dmd -ofprog prog.o -L-lmylib
	/usr/bin/ld: cannot find -lmylib
	collect2: error: ld returned 1 exit status
	--- errorlevel 1
	scons: *** [prog] Error 1
	scons: building terminated because of errors.

This works correctly when using the C compiler (SCons correctly inserts
a "-L." in the link command).

//

Also, an unrelated issue: if DC isn't specified and no D compiler is
found in $PATH, it produces a rather odd command line:

	scons: Reading SConscript files ...
	scons: done reading SConscript files.
	scons: Building targets ...
	I. -c -ofprog.o prog.d
	sh: 1: I.: not found
	ofprog prog.o -L-lmylib
	sh: 1: ofprog: not found
	scons: done building targets.

This is not a big deal, but it'd be nice if the tool gave a more helpful
message along the lines of "I can't find a D compiler, please specify
one", instead of producing a mangled command. :-)


T

-- 
It's amazing how careful choice of punctuation can leave you hanging:


More information about the Digitalmars-d mailing list