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

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
hpx-users mailing list
[email protected]
https://mail.cct.lsu.edu/mailman/listinfo/hpx-users

Reply via email to