use warnings; use strict; our $cb; BEGIN { eval { require ExtUtils::CBuilder }; if($@ ne "") { require Test::More; Test::More::plan(skip_all => "ExtUtils::CBuilder unavailable"); } $cb = ExtUtils::CBuilder->new(quiet => 1); unless($cb->have_compiler) { require Test::More; Test::More::plan(skip_all => "compiler unavailable"); } eval { require File::Spec }; if($@ ne "") { require Test::More; Test::More::plan(skip_all => "File::Spec unavailable"); } } use Test::More tests => 6; BEGIN { use_ok "DynaLoader::Functions", qw(dyna_load dyna_resolve dyna_unload); } our @todelete; END { unlink @todelete; } my $c_file = File::Spec->catdir("t", "dyna_low.c"); my $o_file = $cb->compile(source => $c_file); push @todelete, $o_file; my($so_file, @so_tmps) = $cb->link(objects => [$o_file], module_name => "t::dyna_low"); push @todelete, $so_file, @so_tmps; my $libh = dyna_load($so_file, { require_symbols => ["dynalow_foo"] }); ok 1; ok(defined(dyna_resolve($libh, "dynalow_foo", {unresolved_action=>"IGNORE"}))); ok(defined(dyna_resolve($libh, "dynalow_bar", {unresolved_action=>"IGNORE"}))); ok(!defined(dyna_resolve($libh, "dynalow_baz", {unresolved_action=>"IGNORE"}))); dyna_unload($libh, {fail_action=>"IGNORE"}); ok 1; 1;