* Relocatable lib calling external C libs: undefined references
@ 2020-08-13 12:31 hreba
0 siblings, 0 replies; only message in thread
From: hreba @ 2020-08-13 12:31 UTC (permalink / raw)
Trying for several days now, I don't get my project to link when I use
relocatable libraries, and only then.
First, I made a thin binding to GSL (GNU Scientific Library). The .ads
files were generated with "g++ -c -fdump-ada-spec ...", with some
corrections. The result used here is gsl_integration_h.ads.
From that, I made a thick binding, called Integration.
And finally, I wrote a test program Test_Integration which imports a
test function from package Test_Integ_Aux.
The subprogram call graph is
Test_Integration
/ \
thick --> Integration.Integration_QNG Test_Integ_Aux.Circle
|
gsl_integration_h.gsl_integration_qng <-- thin
The project files are:
-- gsl_thin.gpr --
library project GSL_Thin is
for Source_Dirs use (".");
for Library_Dir use "lib";
for Object_Dir use "obj";
for Library_Name use "gsl_thin";
for Library_Kind use "relocatable";
for Externally_Built use "false";
package Compiler is
for Default_Switches ("ada") use ("-g");
end Compiler;
package Linker is
for Linker_Options use ("-L/usr/lib/x86_64-linux-gnu", "-lgsl",
"-lgslcblas");
end Linker;
end GSL_Thin;
-- gsl.gpr --
with "Thin/gsl_thin";
library project GSL is
for Source_Dirs use (".");
for Object_Dir use "obj";
for Library_Dir use "lib";
for Library_Name use "gsl";
for Library_Kind use "relocatable";
for Library_Interface use ("Integration");
for Externally_Built use "false";
package Compiler is
for Default_Switches ("ada") use ("-g");
end Compiler;
package Linker is
for Linker_Options use ("-g");
end Linker;
end GSL;
-- test_integration.gpr --
with "../Library/gsl";
project Test_Integration is
for Source_Dirs use (".");
for Object_Dir use "obj";
for Exec_Dir use ".";
for Main use ("test_integration.adb");
package Compiler is
for Default_Switches ("ada") use ("-g");
end Compiler;
package Linker is
for Linker_Options use ("-g");
end Linker;
end Test_Integration;
When I call gprbuild with the last one, I get
Compile
[Ada] test_integration.adb
[Ada] gsl_integration_h.ads
[Ada] gsl_math_h.ads
[Ada] integration.adb
[Ada] test_integ_aux.adb
Build Libraries
[gprlib] gsl_thin.lexch
[gprlib] gsl.lexch
[link library] libgsl_thin.so
[bind SAL] gsl
[Ada] b__gsl.adb
[link library] libgsl.so
Bind
[gprbind] test_integration.bexch
[Ada] test_integration.ali
Link
[link] test_integration.adb
/opt/GNAT/2020/bin/../libexec/gcc/x86_64-pc-linux-gnu/9.3.1/ld:
/home/frank/Temp/Test/Library/lib//libgsl.so: undefined reference to
`gsl_integration_qng'
collect2: error: ld returned 1 exit status
gprbuild: link of test_integration.adb failed
gprbuild: failed command was: /opt/GNAT/2020/bin/gcc test_integration.o
b__test_integration.o /home/frank/Temp/Test/Test/obj/test_integ_aux.o
-L/home/frank/Temp/Test/Library/lib/ -lgsl
-L/home/frank/Temp/Test/Library/Thin/lib/ -lgsl_thin -g
-L/usr/lib/x86_64-linux-gnu -lgsl -lgslcblas
-L/home/frank/Temp/Test/Test/obj/ -L/home/frank/Temp/Test/Test/obj/
-L/home/frank/Temp/Test/Library/lib/
-L/home/frank/Temp/Test/Library/Thin/lib/
-L/opt/GNAT/2020/lib/gcc/x86_64-pc-linux-gnu/9.3.1/adalib/
-shared-libgcc -lgnat-2020 -ldl
-Wl,-rpath-link,/opt/GNAT/2020/lib/gcc/x86_64-pc-linux-gnu/9.3.1//adalib
-Wl,-z,origin,-rpath,$ORIGIN/..//Library/lib:$ORIGIN/..//Library/Thin/lib:/usr/lib/x86_64-linux-gnu:$ORIGIN//obj:/opt/GNAT/2020/lib/gcc/x86_64-pc-linux-gnu/9.3.1/adalib:/opt/GNAT/2020/lib64:/opt/GNAT/2020/lib
-o /home/frank/Temp/Test/Test//test_integration
When I look with nm into libgsl.so I see indeed gsl_integration_qng
undefined:
U gsl_integration_qng
and a little below:
0000000000002090 T integration__integration_qng
When compiling the libraries as static, the program works, but whatever
project variation I try with relocatable ones, I get this linking error.
I even made some simpler examples with relocatable libraries and without
external C libraries, with corresponding project files, and they all
work. So I don't know what to try else.
--
Frank Hrebabetzky, Kronach +49 / 9261 / 950 0565
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-08-13 12:31 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-13 12:31 Relocatable lib calling external C libs: undefined references hreba
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox