stdout does not work in GDC
D_Boy
obladiobama at gmail.com
Thu May 23 17:32:29 UTC 2019
On Monday, 20 May 2019 at 15:19:27 UTC, Iain Buclaw wrote:
> On Mon, 20 May 2019 at 12:50, D_Boy via D.gnu
> <d.gnu at puremagic.com> wrote:
>>
>> On Monday, 20 May 2019 at 08:01:01 UTC, D_Boy wrote:
>> > I am following Ali Çehreli's book. It says that
>> > stdout.write()
>> > should work the same as write()
>> >
>> > In DMD it works. But when trying to compile with GDC I get
>> > the following error:
>> >
>> > gdc anApp.d -o anApp && ./anApp
>> > /usr/bin/ld: /tmp/cc5zJLcW.o: in function `_Dmain':
>> > anApp.d:(.text+0x32): undefined reference to
>> > `_D3std5stdio24__T10makeGlobalS6stdoutZ10makeGlobalFNbNcNdNiZS3std5stdio4File'
>> > collect2: error: ld returned 1 exit status
>> >
>> >
>> > Could you please tell me what could be wrong?
>> >
>> > I am using DMD64 2.086.0 and gdc (Ubuntu 8.3.0-6ubuntu1)
>> > 8.3.0
>> > on Ubuntu 19.04/64.
>>
>> Update: the hello world program works fine. Problem appears
>> when
>> I add readf(" %s", &variable)
>
> $ gdc-8 test.d -o shared
> $ nm shared | grep
> _D3std5stdio24__T10makeGlobalS6stdoutZ10makeGlobalFNbNcNdNiZS3std5stdio4File
> U
> _D3std5stdio24__T10makeGlobalS6stdoutZ10makeGlobalFNbNcNdNiZS3std5stdio4File
> $ objdump -T /usr/lib/x86_64-linux-gnu/libgphobos.so.76 | grep
> _D3std5stdio24__T10makeGlobalS6stdoutZ10makeGlobalFNbNcNdNiZS3std5stdio4File
> 000000000034c610 w DF .text 0000000000000070 Base
> _D3std5stdio24__T10makeGlobalS6stdoutZ10makeGlobalFNbNcNdNiZS3std5stdio4File
>
> $ gdc-8 test.d -o static -static-libphobos
> ibuclaw at labs-322:~ $ nm static | grep
> _D3std5stdio24__T10makeGlobalS6stdoutZ10makeGlobalFNbNcNdNiZS3std5stdio4File
> 000000000002e720 W
> _D3std5stdio24__T10makeGlobalS6stdoutZ10makeGlobalFNbNcNdNiZS3std5stdio4File
>
> Can't reproduce, but then again one can't second guess what
> code you have.
>
> In all likelihood you're linking against the wrong library.
Hi! Thanks for your reply!
Here is the not working code(same error as above when trying with
GDC):
import std.stdio;
void main(){
int a, b, c;
writeln("Insert three numbers each one followed by hitting
Enter key");
readf(" %s", a);
readf(" %s", b);
readf(" %s", c);
if ( a < b && b < c)
writeln(a, b, c);
if ( a > b && b > c)
writeln(c, b, a);
if ( a < c && c < b)
writeln(a, c, b);
if ( b < a && a < c)
writeln(b, a, c);
if ( b < c && c < a)
writeln(b, c, a);
if (a == b && b == c)
writeln(a, b, c);
if ( a == b && b < c)
writeln(a, b, c);
if ( a == b && b > c)
writeln(c, b, a);
if ( a == c && c < b)
writeln(a, c, b);
if ( a == c && c > b)
writeln(b, c, a);
}
I am thinking too the problem is a library linking. Is there
anyway to find the wrong linking?
Also, here is the command I am using to compile in GDC:
gdc main.d -o main && ./main
I tried also only to compile it: gdc main.d -o main but got the
same error.
I mention again: no problem at all in DMD.
More information about the D.gnu
mailing list