Почему программа C++ запускается без ошибок не компилируя её с помощью статистической библиотекой, а с компилятор выдаёт ошибку?
Когда Я компилирую C++ код с помощью GCC не используя статистическую библиотеку то она запускается без ошибок, а когда с помощью её использования то компилятор вылетает с ошибкой, почему так?
Вот например, команда компиляция не используя статистическую библиотеку:
g++ -std=c++17 -Wall -Werror -Wpedantic -pedantic-errors -g *.cpp && ./a.out
Когда Я запускаю программу то она запускается без ошибок и не вылетает.
А теперь вот команды компиляции статистической библиотеки и самого кода:
g++ -std=c++17 -Wall -Werror -Wpedantic -pedantic-errors -g -c parser.cpp data.cpp tools.cpp && ar rvs libTurboINI.a *.o
g++ -std=c++17 -Wall -Werror -Wpedantic -pedantic-errors -g -L. -lTurboINI main.cpp
А вот с использованием статистической библиотеки компилятор вылетает с ошибкой.
Вот сама ошибка:
/usr/bin/ld: /tmp/ccYqFNVP.o: in function `std::__detail::_MakeUniq<TurboINI::parser>::__single_object std::make_unique<TurboINI::parser, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
/usr/include/c++/12/bits/unique_ptr.h:1065: undefined reference to `TurboINI::parser::parser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/ccYqFNVP.o: in function `std::default_delete<TurboINI::parser>::operator()(TurboINI::parser*) const':
/usr/include/c++/12/bits/unique_ptr.h:95: undefined reference to `TurboINI::parser::~parser()'
collect2: error: ld returned 1 exit status
Хочу отметить что в коде Я использую smart pointers-ы, такие, как std::unique_ptr
и std::shared_ptr
.