Thanks for your feedback Hartmut. Only exporting the Container had no effect. As I already wrote, I created some kind of cyclic dependency between my two components’ sources (ugh, bad design…), for which Clang needed the "-undefined dynamic_lookup” parameter.
Best, Tim > On 16 Nov 2016, at 16:06, Hartmut Kaiser <[email protected]> wrote: > > Try exporting your component: <> > > class HPX_COMPONENT_EXPORT Container > : public hpx::components::component_base<Container> > { ... }; > > HTH > Regards Hartmut > --------------- > http://boost-spirit.com <http://boost-spirit.com/> > http://stellar.cct.lsu.edu <http://stellar.cct.lsu.edu/> > > From: [email protected] > [mailto:[email protected]] On Behalf Of Tim Biedert > Sent: Wednesday, November 16, 2016 8:32 AM > To: [email protected] > Subject: [hpx-users] Undefined symbols: transfer_action(), > transfer_continuation_action(), get_action_name<>() > > On macOS with current HPX master I get the following linker errors when > compiling my project, which works fine on my Arch Linux machine with a couple > of weeks old HPX. > > Undefined symbols for architecture x86_64: > "hpx::actions::transfer_action<server::Container::render_action>::transfer_action()", > referenced from: > hpx::actions::detail::register_action<server::Container::render_action>::create(bool) > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::render_action>::create(bool) > in CommunicationHandler.cpp.o > "hpx::actions::transfer_action<server::Container::loadData_action>::transfer_action()", > referenced from: > hpx::actions::detail::register_action<server::Container::loadData_action>::create(bool) > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::loadData_action>::create(bool) > in CommunicationHandler.cpp.o > "hpx::actions::transfer_action<server::Container::initBlocks_action>::transfer_action()", > referenced from: > hpx::actions::detail::register_action<server::Container::initBlocks_action>::create(bool) > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::initBlocks_action>::create(bool) > in CommunicationHandler.cpp.o > "hpx::actions::transfer_action<server::Container::updateConfig_action>::transfer_action()", > referenced from: > hpx::actions::detail::register_action<server::Container::updateConfig_action>::create(bool) > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::updateConfig_action>::create(bool) > in CommunicationHandler.cpp.o > "hpx::actions::transfer_continuation_action<server::Container::render_action>::transfer_continuation_action()", > referenced from: > hpx::actions::detail::register_action<server::Container::render_action>::create(bool) > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::render_action>::create(bool) > in CommunicationHandler.cpp.o > "hpx::actions::transfer_continuation_action<server::Container::loadData_action>::transfer_continuation_action()", > referenced from: > hpx::actions::detail::register_action<server::Container::loadData_action>::create(bool) > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::loadData_action>::create(bool) > in CommunicationHandler.cpp.o > "hpx::actions::transfer_continuation_action<server::Container::initBlocks_action>::transfer_continuation_action()", > referenced from: > hpx::actions::detail::register_action<server::Container::initBlocks_action>::create(bool) > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::initBlocks_action>::create(bool) > in CommunicationHandler.cpp.o > "hpx::actions::transfer_continuation_action<server::Container::updateConfig_action>::transfer_continuation_action()", > referenced from: > hpx::actions::detail::register_action<server::Container::updateConfig_action>::create(bool) > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::updateConfig_action>::create(bool) > in CommunicationHandler.cpp.o > "char const* > hpx::actions::detail::get_action_name<server::Container::render_action>()", > referenced from: > hpx::actions::detail::register_action<server::Container::render_action>::register_action() > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::render_action>::register_action() > in CommunicationHandler.cpp.o > "char const* > hpx::actions::detail::get_action_name<server::Container::loadData_action>()", > referenced from: > hpx::actions::detail::register_action<server::Container::loadData_action>::register_action() > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::loadData_action>::register_action() > in CommunicationHandler.cpp.o > "char const* > hpx::actions::detail::get_action_name<server::Container::initBlocks_action>()", > referenced from: > hpx::actions::detail::register_action<server::Container::initBlocks_action>::register_action() > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::initBlocks_action>::register_action() > in CommunicationHandler.cpp.o > "char const* > hpx::actions::detail::get_action_name<server::Container::updateConfig_action>()", > referenced from: > hpx::actions::detail::register_action<server::Container::updateConfig_action>::register_action() > in Block.cpp.o > hpx::actions::detail::register_action<server::Container::updateConfig_action>::register_action() > in CommunicationHandler.cpp.o > ld: symbol(s) not found for architecture x86_64 > > > Any ideas where this comes from? > > > Some (simplified) code to show how actions are declared/registered: > > > > > —— Container.h: —— > > namespace server > { > class Container : public hpx::components::simple_component_base<Container> > { > public: > glm::ivec3 loadData(const Config& config); > HPX_DEFINE_COMPONENT_ACTION(Container, loadData); > > // ... > }; > > } > > HPX_REGISTER_ACTION_DECLARATION(server::Container::loadData_action, > container_loadData_action); > // similar for other actions > > > > —— Container.cpp: —— > > #include "Container.h" > > HPX_REGISTER_COMPONENT_MODULE(); > > typedef hpx::components::simple_component<server::Container> Container_type; > HPX_REGISTER_COMPONENT(Container_type, Container); > > HPX_REGISTER_ACTION(Container_type::wrapped_type::loadData_action, > container_loadData_action); > // similar for other actions > > > namespace server > { > glm::ivec3 Container::loadData(const Config& config) > { > // ... > } > } > > > > > > Thanks! > Tim > > > _______________________________________________ > hpx-users mailing list > [email protected] > https://mail.cct.lsu.edu/mailman/listinfo/hpx-users
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ hpx-users mailing list [email protected] https://mail.cct.lsu.edu/mailman/listinfo/hpx-users
