comp.lang.ada
 help / color / mirror / Atom feed
From: Qun-Ying <zhu.qunying@gmail.com>
Subject: Re: GPS: Including C headers from paths which are not configured in Source_Dirs
Date: Thu, 8 Oct 2015 11:11:39 -0700
Date: 2015-10-08T11:11:39-07:00	[thread overview]
Message-ID: <mv6bkl$g8s$2@speranza.aioe.org> (raw)
In-Reply-To: 8a324b12-4774-4a73-9e6e-c2b87d80f4e8@googlegroups.com

Rego, P. wrote:
> On Thursday, October 8, 2015 at 12:29:32 PM UTC-3, Simon Wright wrote:
>>     package Compiler is
>>        for Switches ("C") use ("-I/your/include/dir");
>>     end Compiler;
>
> It did not work, maybe I did wrong. I built a test code to analyze better.
>
> --test.gpr
> project Test is
>     for Languages use ("Ada", "C");
>     for Source_Dirs use (".");
>     for Main use ("ohmy.adb");
> 	
>     package Compiler is
>        for Switches ("C") use ("-Ioutsiders");
>     end Compiler;
>
> end Test;
>
> --ohmy.adb
> procedure Ohmy is
>     procedure Put_Ohmy;
>     pragma Import (C, Put_Ohmy, "putOhmy");
> begin
>     Put_Ohmy;
> end Ohmy;
>
> --bla.h
> void putOhmy(void);
>
> --bla.c
> #include <bla.h>
> #include "common/bla_other.h"
>
> void putOhmy (void) {
>      putOhmyOther();
> }
>
> --outsiders/common/bla_other.h
> void putOhmyOther();
>
> --outsiders/common/bla_other.c
> #include <bla_other.h>
> #include <stdio.h>
>
> void putOhmyOther(){
>      printf("Ohmy");
> }
>
> In this case, the built returns the error message:
>> gprbuild -d -Ptest.gpr ohmy.adb
>> gcc ohmy.o -o ohmy.exe
>> libtest.a(bla.o):bla.c:(.text+0x7): undefined reference to `putOhmyOther'
>> collect2.exe: error: ld returned 1 exit status
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Your program compile fine, it include your header file without problem, 
but failed on linking.

As putOhmyOther is defined in common/bla_other.c, which is not compiled 
in your project.

>> gprbuild: link of ohmy.adb failed
>> [2015-10-08 13:38:54] process exited with status 4, 100% (2/2), elapsed time: 03.94s
>
> Realize that the folder 'outsiders' is included in project, so (I guess)
 > its subfolders should be accessible by an include like
 > '#include "common/bla_other.h"' (?) So what did I do wrong?

If you are linking with 3rd party C lib, not only do you need to include 
the header file, you also need to link with its lib.


  reply	other threads:[~2015-10-08 18:11 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-08 14:32 GPS: Including C headers from paths which are not configured in Source_Dirs Rego, P.
2015-10-08 15:29 ` Simon Wright
2015-10-08 16:51   ` Rego, P.
2015-10-08 18:11     ` Qun-Ying [this message]
2015-10-08 20:49     ` Simon Wright
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox