www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to config the GDC on linux target for ARM linux?

reply FrankLike <1150015857 qq.com> writes:
Now I build a project for ARM linux on ubuntu 15.04 ,but build 
error.
I download the 'wiringPi' from http://wiringPi.com,convert the 
*.h to *.d.then build the 'aa.so' file:

dfiles="max31855.d max5322.d mcp23008.d mcp23016.d mcp23016reg.d 
mcp23017.d mcp23s08.d mcp23s17.d mcp23x08.d mcp23x0817.d 
mcp3002.d mcp3004.d mcp3422.d mcp4802.d pcf8574.d pcf8591.d 
sn3218.d softPwm.d softServo.d softTone.d sr595.d wiringPi.d 
wiringPiI2C.d wiringPiSPI.d wiringSerial.d wiringShift.d 
wpiExtensions.d"

ofiles="drcSerial.o max31855.o max5322.o mcp23008.o mcp23016.o  
mcp23017.o mcp23s08.o mcp23s17.o mcp3002.o mcp3004.o mcp3422.o 
mcp4802.o pcf8574.o pcf8591.o piHiPri.o piThead.o sn3218.o 
softPwm.o softServo.o softTone.o sr595.o wiringPi.o wiringPiI2C.o 
wiringPiSPI.o wiringSerial.o wiringShift.o wpiExtensions.o"

  /opt/arm-unknown-linux-gnueabihf/bin/arm-linux-gnueabihf-gdc  -o 
aa.so $ofiels $dfiles  -shared
---------------------------------------my.d
import wiringPi;
import std.stdio;

void main()
{
	writeln("start");
	wiringPiSetup();
	pinMode(0,OUTPUT);
	while(1)
	{
		digitalWrite(0,HIGH);
		delay(500);
		digitalWrite(0,LOW);
		delay(500);
	}
return;
}
-------------------------------------build the my execute file
/opt/arm-unknown-linux-gnueabihf/bin/arm-linux-gnueabihf-gdc  -o 
my  my.d aa.so -I./wiringPi/WiringPi/

---------------------now get the error:
my.d:1:8: error: module wiringPi is in file 'wiringPi.d' which 
cannot be read
  import wiringPi;
         ^
import path[0] = 
/opt/arm-unknown-linux-gnueabihf/lib/gcc/arm-unknown-linux-gnueabihf/5.2.0/include/d
---------------------I copy the *.d to 
/opt/arm-unknown-linux-gnueabihf/lib/gcc/arm-unknown-linux-gnueabihf/5.2.0/include/d
it's ok ,but where is the file for config?
---------------------get another error:
/tmp/cc7M1B9I.o: In function `_Dmain':
my.d:(.text+0x60): undefined reference to `wiringPiSetup'
my.d:(.text+0x6c): undefined reference to `pinMode'
my.d:(.text+0x84): undefined reference to `digitalWrite'
my.d:(.text+0x8c): undefined reference to `delay'
my.d:(.text+0x98): undefined reference to `digitalWrite'
my.d:(.text+0xa0): undefined reference to `delay'
collect2: error: ld returned 1 exit status
---------------------------------end

I'm not known the GDC config file ,and maybe I use the error 
build .
Who can help me?
  thank you.
Dec 27 2015
parent reply ZombineDev <valid_email he.re> writes:
On Monday, 28 December 2015 at 04:52:44 UTC, FrankLike wrote:
 Now I build a project for ARM linux on ubuntu 15.04 ,but build 
 error.
 I download the 'wiringPi' from http://wiringPi.com,convert the 
 *.h to *.d.then build the 'aa.so' file:

 dfiles="max31855.d max5322.d mcp23008.d mcp23016.d 
 mcp23016reg.d mcp23017.d mcp23s08.d mcp23s17.d mcp23x08.d 
 mcp23x0817.d mcp3002.d mcp3004.d mcp3422.d mcp4802.d pcf8574.d 
 pcf8591.d sn3218.d softPwm.d softServo.d softTone.d sr595.d 
 wiringPi.d wiringPiI2C.d wiringPiSPI.d wiringSerial.d 
 wiringShift.d wpiExtensions.d"

 ofiles="drcSerial.o max31855.o max5322.o mcp23008.o mcp23016.o  
 mcp23017.o mcp23s08.o mcp23s17.o mcp3002.o mcp3004.o mcp3422.o 
 mcp4802.o pcf8574.o pcf8591.o piHiPri.o piThead.o sn3218.o 
 softPwm.o softServo.o softTone.o sr595.o wiringPi.o 
 wiringPiI2C.o wiringPiSPI.o wiringSerial.o wiringShift.o 
 wpiExtensions.o"

  /opt/arm-unknown-linux-gnueabihf/bin/arm-linux-gnueabihf-gdc  
 -o aa.so $ofiels $dfiles  -shared
 ---------------------------------------my.d
 import wiringPi;
 import std.stdio;

 void main()
 {
 	writeln("start");
 	wiringPiSetup();
 	pinMode(0,OUTPUT);
 	while(1)
 	{
 		digitalWrite(0,HIGH);
 		delay(500);
 		digitalWrite(0,LOW);
 		delay(500);
 	}
 return;
 }
 -------------------------------------build the my execute file
 /opt/arm-unknown-linux-gnueabihf/bin/arm-linux-gnueabihf-gdc  
 -o my  my.d aa.so -I./wiringPi/WiringPi/

 ---------------------now get the error:
 my.d:1:8: error: module wiringPi is in file 'wiringPi.d' which 
 cannot be read
  import wiringPi;
         ^
 import path[0] = 
 /opt/arm-unknown-linux-gnueabihf/lib/gcc/arm-unknown-linux-gnueabihf/5.2.0/include/d
 ---------------------I copy the *.d to 
 /opt/arm-unknown-linux-gnueabihf/lib/gcc/arm-unknown-linux-gnueabihf/5.2.0/include/d
 it's ok ,but where is the file for config?
 ---------------------get another error:
 /tmp/cc7M1B9I.o: In function `_Dmain':
 my.d:(.text+0x60): undefined reference to `wiringPiSetup'
 my.d:(.text+0x6c): undefined reference to `pinMode'
 my.d:(.text+0x84): undefined reference to `digitalWrite'
 my.d:(.text+0x8c): undefined reference to `delay'
 my.d:(.text+0x98): undefined reference to `digitalWrite'
 my.d:(.text+0xa0): undefined reference to `delay'
 collect2: error: ld returned 1 exit status
 ---------------------------------end

 I'm not known the GDC config file ,and maybe I use the error 
 build .
 Who can help me?
  thank you.
About the first error ("...module wiringPi is in file 'wiringPi.d' which cannot be read...") - are you sure that the dfiles are in "./wiringPi/WiringPi/"? The compiler reports that it can't find them there. You can try copying the WiringPi dfiles in the same folder as "my.d". About the second error - you need to verify that aa.so actually has those symbols that the linker reports as "undefined reference". You can do this with readlelf or nm. For more info see here:http://stackoverflow.com/questions/1237575/how-do-i-find-out-what-all-symbols-are-exported-from-a-shared-object
Dec 28 2015
parent reply FrankLike <1150015857 qq.com> writes:
 About the first error ("...module wiringPi is in file 
 'wiringPi.d' which cannot be read...") - are you sure that the 
 dfiles are in "./wiringPi/WiringPi/"? The compiler reports that 
 it can't find them there.
 You can try copying the WiringPi dfiles in the same folder as 
 "my.d".

 About the second error - you need to verify that aa.so actually 
 has those symbols that the linker reports as "undefined 
 reference". You can do this with readlelf or nm. For more info 
 see 
 here:http://stackoverflow.com/questions/1237575/how-do-i-find-out-what-all-symbols-are-exported-from-a-shared-object
Thank you,but can you tell me that what is right way to use GDC on linux,such as d refer a c lib. for eacample: a.d refer x.h x.c how do you build it by GDC? what's your steps? How to config the GDC for the thirty c lib and d files. Thank you,waiting for your answer.
Dec 28 2015
parent reply FrankLike <1150015857 qq.com> writes:
On Monday, 28 December 2015 at 13:17:04 UTC, FrankLike wrote:
 About the first error ("...module wiringPi is in file 
 'wiringPi.d' which cannot be read...") - are you sure that the 
 dfiles are in "./wiringPi/WiringPi/"? The compiler reports 
 that it can't find them there.
 You can try copying the WiringPi dfiles in the same folder as 
 "my.d".

 About the second error - you need to verify that aa.so 
 actually has those symbols that the linker reports as 
 "undefined reference". You can do this with readlelf or nm. 
 For more info see 
 here:http://stackoverflow.com/questions/1237575/how-do-i-find-out-what-all-symbols-are-exported-from-a-shared-object
Thank you,but can you tell me that what is right way to use GDC on linux,such as d refer a c lib. for eacample: a.d refer x.h x.c how do you build it by GDC? what's your steps? How to config the GDC for the third part c libaries and d files,such as PATH. Thank you,waiting for your answer.
Dec 28 2015
parent reply FrankLike <1150015857 qq.com> writes:
  I've gotten the answer: use the difference 'gcc' for c code.
-------------------------------For x86_64:

dfiles="max31855.d max5322.d mcp23008.d mcp23016.d mcp23016reg.d 
mcp23017.d mcp23s08.d mcp23s17.d mcp23x08.d mcp23x0817.d 
mcp3002.d mcp3004.d mcp3422.d mcp4802.d pcf8574.d pcf8591.d 
sn3218.d softPwm.d softServo.d softTone.d sr595.d wiringPi.d 
wiringPiI2C.d wiringPiSPI.d wiringSerial.d wiringShift.d 
wpiExtensions.d"

ofiles="drcSerial.o max31855.o max5322.o mcp23008.o mcp23016.o  
mcp23017.o mcp23s08.o mcp23s17.o mcp3002.o mcp3004.o mcp3422.o 
mcp4802.o pcf8574.o pcf8591.o piHiPri.o piThread.o sn3218.o 
softPwm.o softServo.o softTone.o sr595.o wiringPi.o wiringPiI2C.o 
wiringPiSPI.o wiringSerial.o wiringShift.o wpiExtensions.o"


gcc -c *.c -m64
/opt/x86_64-pc-linux-gnu/bin/x86_64-linux-gnu-gdc -o my my.d   
$ofiles -I$dfiles

--------------------------------For ARM:


cfiles="wiringPi.c max31855.c max5322.c mcp23008.c mcp23016.c  
mcp23017.c mcp23s08.c mcp23s17.c mcp3002.c mcp3004.c mcp3422.c 
mcp4802.c pcf8574.c pcf8591.c sn3218.c softPwm.c softServo.c 
softTone.c sr595.c  wiringPiI2C.c wiringPiSPI.c wiringSerial.c 
wiringShift.c wpiExtensions.c"

dfiles="max31855.d max5322.d mcp23008.d mcp23016.d mcp23016reg.d 
mcp23017.d mcp23s08.d mcp23s17.d mcp23x08.d mcp23x0817.d 
mcp3002.d mcp3004.d mcp3422.d mcp4802.d pcf8574.d pcf8591.d 
sn3218.d softPwm.d softServo.d softTone.d sr595.d wiringPi.d 
wiringPiI2C.d wiringPiSPI.d wiringSerial.d wiringShift.d 
wpiExtensions.d"

ofiles="drcSerial.o max31855.o max5322.o mcp23008.o mcp23016.o  
mcp23017.o mcp23s08.o mcp23s17.o mcp3002.o mcp3004.o mcp3422.o 
mcp4802.o pcf8574.o pcf8591.o piHiPri.o piThread.o sn3218.o 
softPwm.o softServo.o softTone.o sr595.o wiringPi.o wiringPiI2C.o 
wiringPiSPI.o wiringSerial.o wiringShift.o wpiExtensions.o"

/opt/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gcc -marm  -c
$cfiles
/opt/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gdc  -o my
my.d   $ofiles -I$dfiles
Dec 28 2015
parent FrankLike <1150015857 qq.com> writes:
On Monday, 28 December 2015 at 15:23:19 UTC, FrankLike wrote:
  New Answer: I've gotten the answer: use the difference 'gcc' for 
c code.
  -------------------------------For x86_64:

  dfiles="max31855.d max5322.d mcp23008.d mcp23016.d
  mcp23016reg.d mcp23017.d mcp23s08.d mcp23s17.d mcp23x08.d
  mcp23x0817.d mcp3002.d mcp3004.d mcp3422.d mcp4802.d pcf8574.d
  pcf8591.d sn3218.d softPwm.d softServo.d softTone.d sr595.d
  wiringPi.d wiringPiI2C.d wiringPiSPI.d wiringSerial.d
  wiringShift.d wpiExtensions.d"

  ofiles="drcSerial.o max31855.o max5322.o mcp23008.o mcp23016.o
  mcp23017.o mcp23s08.o mcp23s17.o mcp3002.o mcp3004.o mcp3422.o
  mcp4802.o pcf8574.o pcf8591.o piHiPri.o piThread.o sn3218.o
  softPwm.o softServo.o softTone.o sr595.o wiringPi.o
  wiringPiI2C.o wiringPiSPI.o wiringSerial.o wiringShift.o
  wpiExtensions.o"


  gcc -c *.c -m64
  /opt/x86_64-pc-linux-gnu/bin/x86_64-linux-gnu-gdc -o my my.d
  $ofiles -I$dfiles

  --------------------------------For ARM(add -I.):


  cfiles="wiringPi.c max31855.c max5322.c mcp23008.c mcp23016.c
  mcp23017.c mcp23s08.c mcp23s17.c mcp3002.c mcp3004.c mcp3422.c
  mcp4802.c pcf8574.c pcf8591.c sn3218.c softPwm.c softServo.c
  softTone.c sr595.c  wiringPiI2C.c wiringPiSPI.c wiringSerial.c
  wiringShift.c wpiExtensions.c"

  dfiles="max31855.d max5322.d mcp23008.d mcp23016.d
  mcp23016reg.d mcp23017.d mcp23s08.d mcp23s17.d mcp23x08.d
  mcp23x0817.d mcp3002.d mcp3004.d mcp3422.d mcp4802.d pcf8574.d
  pcf8591.d sn3218.d softPwm.d softServo.d softTone.d sr595.d
  wiringPi.d wiringPiI2C.d wiringPiSPI.d wiringSerial.d
  wiringShift.d wpiExtensions.d"

  ofiles="drcSerial.o max31855.o max5322.o mcp23008.o mcp23016.o
  mcp23017.o mcp23s08.o mcp23s17.o mcp3002.o mcp3004.o mcp3422.o
  mcp4802.o pcf8574.o pcf8591.o piHiPri.o piThread.o sn3218.o
  softPwm.o softServo.o softTone.o sr595.o wiringPi.o
  wiringPiI2C.o wiringPiSPI.o wiringSerial.o wiringShift.o
  wpiExtensions.o"

  
/opt/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gcc -marm  -c
$cfiles -I.
  
/opt/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gdc  -o my
my.d   $ofiles -I$dfiles
Dec 28 2015