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
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
Please let me know if there are further issues.
Great, that fixed the issue