nnstreamer / nntrainer

NNtrainer is Software Framework for Training Neural Network Models on Devices.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Errors while compiling a file with NNtrainer include

KirillP2323 opened this issue · comments

While compiling a project which uses NNtrainer library (I tried to compile task_runner.cpp from SimpleShot directory), I encounter the following errors:

$ g++ -I /usr/include/nnstreamer -I /usr/include/nntrainer -std=c++17 task_runner.cpp
/usr/bin/ld: /tmp/ccqp6XhC.o: in function `simpleshot::createModel(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const':
task_runner.cpp:(.text+0xa60): undefined reference to `ml::train::createLayer(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: task_runner.cpp:(.text+0xc9c): undefined reference to `ml::train::createLayer(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: task_runner.cpp:(.text+0xe47): undefined reference to `ml::train::createLayer(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: task_runner.cpp:(.text+0x10fb): undefined reference to `ml::train::createLayer(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: /tmp/ccqp6XhC.o: in function `simpleshot::createModel(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
task_runner.cpp:(.text+0x175d): undefined reference to `ml::train::createModel(ml::train::ModelType, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: /tmp/ccqp6XhC.o: in function `main':
task_runner.cpp:(.text+0x1d6b): undefined reference to `nntrainer::AppContext::Global()'
/usr/bin/ld: task_runner.cpp:(.text+0x21ae): undefined reference to `ml::train::createDataset(ml::train::DatasetType, char const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: task_runner.cpp:(.text+0x2245): undefined reference to `ml::train::createDataset(ml::train::DatasetType, char const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: /tmp/ccqp6XhC.o: in function `ml::train::layer::BackboneTFLite(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)':
task_runner.cpp:(.text._ZN2ml5train5layer14BackboneTFLiteERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE[_ZN2ml5train5layer14BackboneTFLiteERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE]+0x3d): undefined reference to `ml::train::createLayer(ml::train::LayerType const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: /tmp/ccqp6XhC.o: in function `ml::train::optimizer::SGD(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)':
task_runner.cpp:(.text._ZN2ml5train9optimizer3SGDERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE[_ZN2ml5train9optimizer3SGDERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE]+0x3d): undefined reference to `ml::train::createOptimizer(ml::train::OptimizerType const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/usr/bin/ld: /tmp/ccqp6XhC.o: in function `nntrainer::Tensor::Tensor(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
task_runner.cpp:(.text._ZN9nntrainer6TensorC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN9nntrainer6TensorC5ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x59): undefined reference to `ml::train::TensorDim::TensorDim(std::bitset<4ul> const&, std::bitset<4ul> const&)'
/usr/bin/ld: task_runner.cpp:(.text._ZN9nntrainer6TensorC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN9nntrainer6TensorC5ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x69): undefined reference to `ml::train::TensorDim::computeStrides() const'
/usr/bin/ld: /tmp/ccqp6XhC.o: in function `simpleshot::layers::CenteringLayer::CenteringLayer()':
task_runner.cpp:(.text._ZN10simpleshot6layers14CenteringLayerC2Ev[_ZN10simpleshot6layers14CenteringLayerC5Ev]+0x2f): undefined reference to `vtable for simpleshot::layers::CenteringLayer'
/usr/bin/ld: /tmp/ccqp6XhC.o: in function `int const nntrainer::AppContext::registerFactory<nntrainer::Layer>(std::unique_ptr<nntrainer::Layer, std::default_delete<nntrainer::Layer> > (*)(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
task_runner.cpp:(.text._ZN9nntrainer10AppContext15registerFactoryINS_5LayerEEEKiPFSt10unique_ptrIT_St14default_deleteIS5_EERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISF_EEERKSF_i[_ZN9nntrainer10AppContext15registerFactoryINS_5LayerEEEKiPFSt10unique_ptrIT_St14default_deleteIS5_EERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISF_EEERKSF_i]+0x64): undefined reference to `int const nntrainer::AppContext::registerFactory<nntrainer::Layer>(std::function<std::unique_ptr<nntrainer::Layer, std::default_delete<nntrainer::Layer> > (std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
collect2: error: ld returned 1 exit status

:octocat: cibot: Thank you for posting issue #2128. The person in charge will reply soon.

If you want to build this application only after nntrainer lib and includes are properly installed, then you can compile with

  • Assume the nntrainer lib and includes are installed in /usr/local/
g++ -o simple_shot task_runner.cpp ./layers/centering.cpp simpleshot_utils.cpp -I/usr/local/include/nntrainer -I./layers -I. -L/sur/local/lib/ -lnntrainer -lccapi-nntrainer -std=c++17 

NNTrainer support the custom layer and this application uses the centering layer as an custom layer placed in layers directory. In order to use the custom layer, you might need adding the some functions already defined as below,

 void finalize(nntrainer::IniLayerContext &context);
 void forwarding(nntrainer::RunLayerContext &context, bool training);
 void calcDerivative(nntrainer::RunLayerContext &context);
 void calcGradient(nntrainer::RunLayerContext &context);
 void supportBackwarding();
// etc.

and you should register the custom layer before using it into AppContext as in

app_context.registerFactory(

Please let me know if there are further issues.

Great, that fixed the issue