From: Simon Wright <simon@pushface.org>
Subject: Re: GPS: Including C headers from paths which are not configured in Source_Dirs
Date: Thu, 08 Oct 2015 21:49:29 +0100
Date: 2015-10-08T21:49:29+01:00 [thread overview]
Message-ID: <lytwq1w0fa.fsf@pushface.org> (raw)
In-Reply-To: 8a324b12-4774-4a73-9e6e-c2b87d80f4e8@googlegroups.com
"Rego, P." <pvrego@gmail.com> writes:
> 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();
> }
This clearly worked as intended, because bla.c got compiled.
> --outsiders/common/bla_other.h
> void putOhmyOther();
>
> --outsiders/common/bla_other.c
> #include <bla_other.h>
> #include <stdio.h>
>
> void putOhmyOther(){
> printf("Ohmy");
> }
But ..
> 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
>> gprbuild: link of ohmy.adb failed
>> [2015-10-08 13:38:54] process exited with status 4, 100% (2/2),
>> elapsed time: 03.94s
This is telling you that outsiders/common/bla_other.o never got included
in the link (probably never got compiled, either).
I take it that the outsiders directory corresponds to an
externally-built C library in your real application? Perhaps you could
represent it as a GPR of its own?
library project Outsiders is
for Library_Name use "outsiders";
for Library_Kind use "static";
for Library_Dir use project'Project_Dir & "src";
for Source_Dirs use project'Project_Dir & "include";
for Externally_Built use "true";
end Outsiders;
and then your test.gpr might say
with Outsiders;
project Test is
for Languages use ("Ada", "C");
for Source_Dirs use (".");
for Main use ("ohmy.adb");
package Compiler is
for Switches ("C") use ("-I" & Outsiders'Source_Dirs);
end Compiler;
end Test;
prev parent reply other threads:[~2015-10-08 20:49 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
2015-10-08 20:49 ` Simon Wright [this message]
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox