लंबे समय श्रोता, पहली बार कॉलर के साथ साझा किया। मुझे पता है कि यह कुछ हद तक अस्पष्ट सवाल है, और बहुत ज्यादा उम्मीद नहीं है। :-)लोडिंग एडी ने पर्ल में DynaLoader.pm
मैं निम्नलिखित एडीए फ़ाइलें:
greeter.ads
package Greeter is
procedure Hello;
end Greeter;
greeter.adb
with Ada.Text_IO; use Ada.Text_IO;
package body Greeter is
procedure Hello is
begin
Put_Line ("Hello, world!");
end Hello;
end Greeter;
और उनकी तरह एक साझा वस्तु में संकलन यह:
gnatmake -z -fPIC greeter.adb
gcc -shared -o libgreeter.so greeter.o
यह ठीक संकलित करता है।
$ nm -D libgreeter.so
w _Jv_RegisterClasses
0000000000201028 A __bss_start
w __cxa_finalize
w __gmon_start__
U __gnat_eh_personality
0000000000201028 A _edata
0000000000201038 A _end
00000000000006a8 T _fini
0000000000000520 T _init
U ada__text_io__put_line__2
0000000000201018 D greeter_E
000000000000063c T greeter__hello
अब मैं पर्ल में है कि साझा वस्तु लोड करने का प्रयास:
#!/usr/bin/env perl
use 5.014;
use strict;
use warnings;
#BEGIN { $ENV{PERL_DL_DEBUG} = 1 };
package Greeter
{
use constant ADADIR => '/usr/lib/gcc/x86_64-linux-gnu/4.4/rts-native/adalib/';
use constant OURDIR => do { (my $f = __FILE__) =~ s{[^/]+$}//; $f || "." };
require DynaLoader;
our @ISA = 'DynaLoader';
my $runtime = DynaLoader::dl_load_file(
ADADIR.'/libgnat.so',
) or die DynaLoader::dl_error();
my $gep = DynaLoader::dl_find_symbol(
$runtime,
'__gnat_eh_personality',
) or die DynaLoader::dl_error();
my $libref = DynaLoader::dl_load_file(
OURDIR.'/libgreeter.so',
0x01,
) or die DynaLoader::dl_error();
my $func = DynaLoader::dl_find_symbol(
$libref,
'greeter__hello',
) or die DynaLoader::dl_error();
print $func, $/;
}
लेकिन निम्न संदेश के साथ बाहर इस बम:
./libgreeter.so nm
निम्नलिखित प्रतीक से पता चलता : अपरिभाषित प्रतीक: __gnat_eh_personality at ./greeter.pl लाइन 26.
क्या किसी के पास कोई संकेत है? क्या डायनालोडर से कुछ बेहतर/आसान है जिसका उपयोग करना चाहिए ??
साइमन राइट का उपयोग कर ++ का उपयोग करते हुए, इस मुझे कुछ अच्छी चीजें साथ आरंभ करने के लिए दे दिया है। मैं इसे आज़माउंगा और यदि यह काम करता है, तो यह जवाब स्वीकार करेगा। – tobyink
मेरे पास अभी तक कोशिश करने के लिए ट्यूट्स नहीं हैं, लेकिन इस बीच में मैंने जवाब स्वीकार कर लिया है क्योंकि यह अब तक दोनों का अधिक आशाजनक प्रतीत होता है। – tobyink