본문 바로가기

기타

[c++] undefined reference to 에러

Microsoft SEAL을 기반으로 작성한 Classification 코드를 컴파일하고 실행하려는 도중, 다음과 같은 에러가 발생했다.

/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o: in function `NB_BreastC_ServerCentric(int, int, std::shared_ptr<seal::SEALContext>, seal::GaloisKeys&, seal::Decryptor&, seal::BatchEncoder&, seal::Encryptor&, seal::Evaluator&, std::vector<long, std::allocator<long> >, int, std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, std::basic_ofstream<char, std::char_traits<char> >&)':
secMLClass.cpp:(.text+0x4980): undefined reference to `RandGen::RandGen()'
/usr/bin/ld: secMLClass.cpp:(.text+0x49bc): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x4a17): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o: in function `NB_BreastC_ClientCentric(int, int, std::shared_ptr<seal::SEALContext>, seal::GaloisKeys&, seal::Decryptor&, seal::BatchEncoder&, seal::Encryptor&, seal::Evaluator&, std::vector<long, std::allocator<long> >, int, std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, std::basic_ofstream<char, std::char_traits<char> >&)':
secMLClass.cpp:(.text+0x87c8): undefined reference to `RandGen::RandGen()'
/usr/bin/ld: secMLClass.cpp:(.text+0x8804): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x885f): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o: in function `PPServCenMNClass(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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::vector<long, std::allocator<long> >, int, int, std::basic_ofstream<char, std::char_traits<char> >&)':
secMLClass.cpp:(.text+0x12265): undefined reference to `RandGen::RandGen()'
/usr/bin/ld: secMLClass.cpp:(.text+0x122de): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x12372): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1411b): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1415c): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x14170): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator*() const'
/usr/bin/ld: secMLClass.cpp:(.text+0x141eb): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator++()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1421b): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1422a): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x14239): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x151b4): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x151f5): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x15209): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator*() const'
/usr/bin/ld: secMLClass.cpp:(.text+0x15284): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator++()'
/usr/bin/ld: secMLClass.cpp:(.text+0x152b4): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x152c3): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x152d2): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x16f2c): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x16f3b): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o:secMLClass.cpp:(.text+0x16f4a): more undefined references to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()' follow
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o: in function `PPClientCenMNClass(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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::vector<long, std::allocator<long> >, int, int, std::basic_ofstream<char, std::char_traits<char> >&)':
secMLClass.cpp:(.text+0x17bdf): undefined reference to `RandGen::RandGen()'
/usr/bin/ld: secMLClass.cpp:(.text+0x17c58): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x17cec): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x17d3c): undefined reference to `RandGen::RandInt(int, int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x19bd6): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x19c17): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x19c2b): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator*() const'
/usr/bin/ld: secMLClass.cpp:(.text+0x19ca6): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator++()'
/usr/bin/ld: secMLClass.cpp:(.text+0x19cd6): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x19ce5): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x19cf4): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1a980): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1a9c1): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1a9d5): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator*() const'
/usr/bin/ld: secMLClass.cpp:(.text+0x1aa50): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator++()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1aa80): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1aa8f): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1aa9e): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1c509): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1c518): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o:secMLClass.cpp:(.text+0x1c527): more undefined references to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()' follow
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o: in function `main':
secMLClass.cpp:(.text+0x1d05e): undefined reference to `itoa[abi:cxx11](int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1d075): undefined reference to `itoa[abi:cxx11](int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1d34d): undefined reference to `NaiveBayesBreastCancer::NaiveBayesBreastCancer(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1d37f): undefined reference to `NaiveBayesBreastCancer::findSystemCounts(int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1d393): undefined reference to `NaiveBayesBreastCancer::findProbsAndLogsFromCounts(int)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1d3a2): undefined reference to `NaiveBayesBreastCancer::accuracyTest()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1d3b1): undefined reference to `NaiveBayesBreastCancer::printConfusionMatrix()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1d3d9): undefined reference to `NaiveBayesBreastCancer::getDatasetMatrix(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1d461): undefined reference to `NaiveBayesBreastCancer::getLogsOfProbs(std::vector<std::vector<long double, std::allocator<long double> >, std::allocator<std::vector<long double, std::allocator<long double> > > >&, std::vector<std::vector<long double, std::allocator<long double> >, std::allocator<std::vector<long double, std::allocator<long double> > > >&, long double&, long double&)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1fd96): undefined reference to `MultinomialNB_Email::MultinomialNB_Email(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, long long&)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1fdb4): undefined reference to `MultinomialNB_Email::MultinomialNB_Email()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1fde6): undefined reference to `MultinomialNB_Email::train(long long&)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1fe1f): undefined reference to `MultinomialNB_Email::classify(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long&)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1fe3d): undefined reference to `MultinomialNB_Email::printConfionMat()'
/usr/bin/ld: secMLClass.cpp:(.text+0x1ff5d): undefined reference to `MultinomialNB_Email::getSelectedFeaturesOnly(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> > > >&)'
/usr/bin/ld: secMLClass.cpp:(.text+0x1ff96): undefined reference to `MultinomialNB_Email::getTVaccordingToSelectedFeatures(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> > > >, std::vector<long, std::allocator<long> >&)'
/usr/bin/ld: secMLClass.cpp:(.text+0x20617): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20658): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x2066c): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator*() const'
/usr/bin/ld: secMLClass.cpp:(.text+0x206e7): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator++()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20717): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20726): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20735): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20da2): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20de3): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20df7): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator*() const'
/usr/bin/ld: secMLClass.cpp:(.text+0x20e72): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator++()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20ea2): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20eb1): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x20ec0): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x237c2): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: secMLClass.cpp:(.text+0x237d1): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o:secMLClass.cpp:(.text+0x237e0): more undefined references to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()' follow
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o: in function `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::recursive_directory_iterator(std::experimental::filesystem::v1::__cxx11::path const&)':
secMLClass.cpp:(.text._ZNSt12experimental10filesystem2v17__cxx1128recursive_directory_iteratorC2ERKNS2_4pathE[_ZNSt12experimental10filesystem2v17__cxx1128recursive_directory_iteratorC5ERKNS2_4pathE]+0x2a): undefined reference to `std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::recursive_directory_iterator(std::experimental::filesystem::v1::__cxx11::path const&, std::experimental::filesystem::v1::directory_options, std::error_code*)'
/usr/bin/ld: CMakeFiles/my_test.dir/secMLClass.cpp.o: in function `std::experimental::filesystem::v1::__cxx11::path::path<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::experimental::filesystem::v1::__cxx11::path>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
secMLClass.cpp:(.text._ZNSt12experimental10filesystem2v17__cxx114pathC2INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EERKT_[_ZNSt12experimental10filesystem2v17__cxx114pathC5INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EERKT_]+0x74): undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/my_test.dir/build.make:104: /home/byhan/heaan/heaan_stats-dev-1/heaan_stats/compare-papers/SEAL-master/native/bin/my_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:95: CMakeFiles/my_test.dir/all] Error 2
make: *** [Makefile:103: all] Error 2

 

secMLClass.cpp 파일 내부에서 선언한 것들에서 문제가 생긴것 같다. 헤더파일이 연결이 잘 안된것 같아서 구글링을 했다.

https://velog.io/@k0000k/C-undefined-reference-to-%ED%95%B4%EA%B2%B0%EB%B2%95