- Situation: I am trying to bind a simple example software with drogon as interface, and torch is involved as core ML function.
- Expectation: compile pass and work as expected.
- Result: link failure with following error
/usr/bin/c++ -D_GLIBCXX_USE_CXX11_ABI=0 CMakeFiles/CppModelServ.dir/main.cc.o CMakeFiles/CppModelServ.dir/controllers/MmsCtrl.cc.o -o CppModelServ -Wl,-rpath,/usr/local/libtorch/lib:/usr/local/cuda/lib64/stubs:/usr/local/cuda/lib64 /usr/local/lib/libdrogon.a /usr/local/libtorch/lib/libtorch.so /usr/local/libtorch/lib/libc10.so /usr/local/libtorch/lib/libkineto.a /usr/local/cuda/lib64/stubs/libcuda.so /usr/local/cuda/lib64/libnvrtc.so /usr/local/cuda/lib64/libnvToolsExt.so /usr/local/cuda/lib64/libcudart.so /usr/local/libtorch/lib/libc10_cuda.so /usr/local/lib/libtrantor.a -ldl -lstdc++fs /usr/lib/x86_64-linux-gnu/libjsoncpp.so /usr/lib/x86_64-linux-gnu/libuuid.so /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/x86_64-linux-gnu/libcrypto.so -lpthread -Wl,--no-as-needed,"/usr/local/libtorch/lib/libtorch_cpu.so" -Wl,--as-needed -Wl,--no-as-needed,"/usr/local/libtorch/lib/libtorch_cuda.so" -Wl,--as-needed /usr/local/libtorch/lib/libc10_cuda.so /usr/local/libtorch/lib/libc10.so /usr/local/cuda/lib64/libcufft.so /usr/local/cuda/lib64/libcurand.so /usr/local/cuda/lib64/libcublas.so /usr/lib/x86_64-linux-gnu/libcudnn.so -Wl,--no-as-needed,"/usr/local/libtorch/lib/libtorch.so" -Wl,--as-needed /usr/local/cuda/lib64/libnvToolsExt.so /usr/local/cuda/lib64/libcudart.so
/usr/bin/ld: CMakeFiles/CppModelServ.dir/main.cc.o: in function `std::enable_if<std::is_default_constructible<drogon::plugin::AccessLogger>::value, void>::type drogon::DrObject<drogon::plugin::AccessLogger>::DrAllocator::registerClass<drogon::plugin::AccessLogger>()':
main.cc:(.text._ZN6drogon8DrObjectINS_6plugin12AccessLoggerEE11DrAllocator13registerClassIS2_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv[_ZN6drogon8DrObjectINS_6plugin12AccessLoggerEE11DrAllocator13registerClassIS2_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv]+0x46): undefined reference to `drogon::DrClassMap::registerClass(std::string const&, std::function<drogon::DrObjectBase* ()> const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/main.cc.o: in function `std::enable_if<std::is_default_constructible<drogon::plugin::SecureSSLRedirector>::value, void>::type drogon::DrObject<drogon::plugin::SecureSSLRedirector>::DrAllocator::registerClass<drogon::plugin::SecureSSLRedirector>()':
main.cc:(.text._ZN6drogon8DrObjectINS_6plugin19SecureSSLRedirectorEE11DrAllocator13registerClassIS2_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv[_ZN6drogon8DrObjectINS_6plugin19SecureSSLRedirectorEE11DrAllocator13registerClassIS2_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv]+0x46): undefined reference to `drogon::DrClassMap::registerClass(std::string const&, std::function<drogon::DrObjectBase* ()> const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/main.cc.o: in function `std::enable_if<std::is_default_constructible<drogon::NotFound>::value, void>::type drogon::DrObject<drogon::NotFound>::DrAllocator::registerClass<drogon::NotFound>()':
main.cc:(.text._ZN6drogon8DrObjectINS_8NotFoundEE11DrAllocator13registerClassIS1_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv[_ZN6drogon8DrObjectINS_8NotFoundEE11DrAllocator13registerClassIS1_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv]+0x46): undefined reference to `drogon::DrClassMap::registerClass(std::string const&, std::function<drogon::DrObjectBase* ()> const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/main.cc.o: in function `std::enable_if<std::is_default_constructible<drogon::LocalHostFilter>::value, void>::type drogon::DrObject<drogon::LocalHostFilter>::DrAllocator::registerClass<drogon::LocalHostFilter>()':
main.cc:(.text._ZN6drogon8DrObjectINS_15LocalHostFilterEE11DrAllocator13registerClassIS1_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv[_ZN6drogon8DrObjectINS_15LocalHostFilterEE11DrAllocator13registerClassIS1_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv]+0x46): undefined reference to `drogon::DrClassMap::registerClass(std::string const&, std::function<drogon::DrObjectBase* ()> const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/main.cc.o: in function `std::enable_if<std::is_default_constructible<drogon::IntranetIpFilter>::value, void>::type drogon::DrObject<drogon::IntranetIpFilter>::DrAllocator::registerClass<drogon::IntranetIpFilter>()':
main.cc:(.text._ZN6drogon8DrObjectINS_16IntranetIpFilterEE11DrAllocator13registerClassIS1_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv[_ZN6drogon8DrObjectINS_16IntranetIpFilterEE11DrAllocator13registerClassIS1_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv]+0x46): undefined reference to `drogon::DrClassMap::registerClass(std::string const&, std::function<drogon::DrObjectBase* ()> const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/controllers/MmsCtrl.cc.o: in function `MmsCtrl::get(std::shared_ptr<drogon::HttpRequest> const&, std::function<void (std::shared_ptr<drogon::HttpResponse> const&)>&&, std::string) const':
MmsCtrl.cc:(.text+0x12a): undefined reference to `Json::Value::Value(std::string const&)'
/usr/bin/ld: MmsCtrl.cc:(.text+0x1ba): undefined reference to `Json::Value::Value(std::string const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/controllers/MmsCtrl.cc.o: in function `MmsCtrl::list(std::shared_ptr<drogon::HttpRequest> const&, std::function<void (std::shared_ptr<drogon::HttpResponse> const&)>&&) const':
MmsCtrl.cc:(.text+0x494): undefined reference to `Json::Value::Value(std::string const&)'
/usr/bin/ld: MmsCtrl.cc:(.text+0x55c): undefined reference to `Json::Value::Value(std::string const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/controllers/MmsCtrl.cc.o: in function `MmsCtrl::invoke(std::shared_ptr<drogon::HttpRequest> const&, std::function<void (std::shared_ptr<drogon::HttpResponse> const&)>&&, std::string) const':
MmsCtrl.cc:(.text+0xdc8): undefined reference to `drogon::utils::getUuid()'
/usr/bin/ld: MmsCtrl.cc:(.text+0xde1): undefined reference to `Json::Value::Value(std::string const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/controllers/MmsCtrl.cc.o: in function `std::enable_if<std::is_default_constructible<MmsCtrl>::value, void>::type drogon::DrObject<MmsCtrl>::DrAllocator::registerClass<MmsCtrl>()':
MmsCtrl.cc:(.text._ZN6drogon8DrObjectI7MmsCtrlE11DrAllocator13registerClassIS1_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv[_ZN6drogon8DrObjectI7MmsCtrlE11DrAllocator13registerClassIS1_EENSt9enable_ifIXsrSt24is_default_constructibleIT_E5valueEvE4typeEv]+0x46): undefined reference to `drogon::DrClassMap::registerClass(std::string const&, std::function<drogon::DrObjectBase* ()> const&)'
/usr/bin/ld: CMakeFiles/CppModelServ.dir/controllers/MmsCtrl.cc.o: in function `std::shared_ptr<MmsCtrl> drogon::DrClassMap::getSingleInstance<MmsCtrl>()':
MmsCtrl.cc:(.text._ZN6drogon10DrClassMap17getSingleInstanceI7MmsCtrlEESt10shared_ptrIT_Ev[_ZN6drogon10DrClassMap17getSingleInstanceI7MmsCtrlEESt10shared_ptrIT_Ev]+0x56): undefined reference to `drogon::DrClassMap::getSingleInstance(std::string const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/CppModelServ.dir/build.make:136: CppModelServ] Error 1
make[2]: Leaving directory '/mnt/cpp-model-serv.git'
make[1]: *** [CMakeFiles/Makefile2:100: CMakeFiles/CppModelServ.dir/all] Error 2
make[1]: Leaving directory '/mnt/cpp-model-serv.git'
make: *** [Makefile:91: all] Error 2