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@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@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.