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