Thread overview
spawnvp on linux
Feb 17, 2005
John Reimer
Feb 17, 2005
Mark Junker
Feb 18, 2005
John Reimer
Feb 18, 2005
Mark Junker
February 17, 2005
Is spawnvp supported on linux? I have no idea what it does, but this is causing me problems (notice that I don't even use spawnvp):

//--------------------------------
import std.process;

void main ()
{
    system("ls");
}
//--------------------------------

$ dmd test.d
gcc test.o -o test -lphobos -lpthread -lm
/usr/lib/gcc-lib/i386-redhat-linux/3.3.3/../../../libphobos.a(process.o)(.gnu.linkonce.t_D3std7process7spawnvpFiAaAAaZi+0x44): En la función `_D3std7process7spawnvpFiAaAAaZi':
: undefined reference to `spawnvp'
collect2: ld devolvió el estado de salida 1
--- errorlevel 1
$

It looks like spawvnp can't be found by ld. This didn't happen with DMD 0.112 (0.111) because it didn't have spawvp.

Using DMD 0.113 on Fedora Core 2, gcc version 3.3.3.

_______________________
Carlos Santander Bernal
February 17, 2005
On Thu, 17 Feb 2005 17:15:03 -0500, Carlos Santander B. wrote:

> Is spawnvp supported on linux? I have no idea what it does, but this is causing me problems (notice that I don't even use spawnvp):
> 
> //--------------------------------
> import std.process;
> 
> void main ()
> {
>      system("ls");
> }
> //--------------------------------
> 
> $ dmd test.d
> gcc test.o -o test -lphobos -lpthread -lm
> /usr/lib/gcc-lib/i386-redhat-linux/3.3.3/../../../libphobos.a(process.o)(.gnu.linkonce.t_D3std7process7spawnvpFiAaAAaZi+0x44):
> En la función `_D3std7process7spawnvpFiAaAAaZi':
> : undefined reference to `spawnvp'
> collect2: ld devolvió el estado de salida 1
> --- errorlevel 1
> $
> 
> It looks like spawvnp can't be found by ld. This didn't happen with DMD 0.112 (0.111) because it didn't have spawvp.
> 
> Using DMD 0.113 on Fedora Core 2, gcc version 3.3.3.
> 
> _______________________
> Carlos Santander Bernal

spawnvp() doesn't appear to be part of Linux.  There are other calls that
are available: fork() (the old *nix standby) , posix_spawn(), and
posix_spawnp().

This looks like a bug in phobos.

- John R.
February 17, 2005
Carlos Santander B. schrieb:
> Is spawnvp supported on linux? I have no idea what it does, but this is causing me problems (notice that I don't even use spawnvp):

I'm quite sure it exists.

> /usr/lib/gcc-lib/i386-redhat-linux/3.3.3/../../../libphobos.a(process.o)(.gnu.linkonce.t_D3std7process7spawnvpFiAaAAaZi+0x44): En la función `_D3std7process7spawnvpFiAaAAaZi':
> : undefined reference to `spawnvp'

Do you see the "FiAaAAaZi" after spawnvp? This indicates a C++ name mangling. spawnvp is a C function. libphobos (process.o) seems to use it without an extern "C" for the function declaration - or it's not declared at all. It really looks like a bug in libphobos (process.o).

Regards,
Mark
February 18, 2005
On Fri, 18 Feb 2005 00:54:48 +0100, Mark Junker wrote:

> Carlos Santander B. schrieb:
>> Is spawnvp supported on linux? I have no idea what it does, but this is causing me problems (notice that I don't even use spawnvp):
> 
> I'm quite sure it exists.

I couldn't find it on my Linux system.  It doesn't appear in spawn.h or any other files or in the 'man' docs.  Were you able to find it?

>> /usr/lib/gcc-lib/i386-redhat-linux/3.3.3/../../../libphobos.a(process.o)(.gnu.linkonce.t_D3std7process7spawnvpFiAaAAaZi+0x44):
>> En la función `_D3std7process7spawnvpFiAaAAaZi':
>> : undefined reference to `spawnvp'
> 
> Do you see the "FiAaAAaZi" after spawnvp? This indicates a C++ name mangling. spawnvp is a C function. libphobos (process.o) seems to use it without an extern "C" for the function declaration - or it's not declared at all. It really looks like a bug in libphobos (process.o).

It's defined in std.c.process, and it's declared extern(C).  I doesn't seem to exist on Linux, so that doesn't help.

- John R.

February 18, 2005
Mark Junker wrote:
> Carlos Santander B. schrieb:
>> /usr/lib/gcc-lib/i386-redhat-linux/3.3.3/../../../libphobos.a(process.o)(.gnu.linkonce.t_D3std7process7spawnvpFiAaAAaZi+0x44): En la función `_D3std7process7spawnvpFiAaAAaZi':
>> : undefined reference to `spawnvp'
> 
> 
> Do you see the "FiAaAAaZi" after spawnvp? This indicates a C++ name mangling. spawnvp is a C function. libphobos (process.o) seems to use it without an extern "C" for the function declaration - or it's not declared at all. It really looks like a bug in libphobos (process.o).
> 
> Regards,
> Mark

Partially wrong: the "FiAaAAaZi" means D name mangling. What ld is saying that std.process.spawnvp() is looking for spawnvp(), which doesn't exist. That is correct, because std.process.spawnvp() calls std.c.process.spawvp() which is declared (as John said) as extern(C).

_______________________
Carlos Santander Bernal
February 18, 2005
John Reimer schrieb:

>>I'm quite sure it exists.
> I couldn't find it on my Linux system.  It doesn't appear in spawn.h or
> any other files or in the 'man' docs.  Were you able to find it?

It seems that you're right. According to Borlands documentation, it only exists on Win32 ...

> It's defined in std.c.process, and it's declared extern(C).  I doesn't
> seem to exist on Linux, so that doesn't help.

Ah, now I understand ... sorry ... can it be that std.process.spawnvp() is declared but not defined for Linux? So the compiler should emit an error?

Regards,
Mark