Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
ivansky
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 2
#1

Линкер ругается и не может собрать проект - C++

29.12.2017, 11:21. Просмотров 213. Ответов 2
Метки нет (Все метки)

Доброго времени суток, эксперты и знатоки,

Обращаюсь к вам с просьбой о помощи.

Пишу небольшую консольную программу для ведения базы студентов.

https://bitbucket.org/ivansky/cpp-oop-coursework

Пожалуйста, помогите понять причину, почему не собирается проект?

Есть подозрения, что я неправильно использую шаблон у класса BinaryStreamObject.

Собираю с помощью CMake.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
./cmake --build /Users/ivan/Workspace/cpp-oop-coursework/cmake-build-debug --target main -- -j 2
[ 12%] Linking CXX executable main
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch x86_64 -macosx_version_min 10.12.0 -o main -search_paths_first -headerpad_max_install_names CMakeFiles/main.dir/src/main.cpp.o CMakeFiles/main.dir/src/BinaryStreamObject.cpp.o CMakeFiles/main.dir/src/Department.cpp.o CMakeFiles/main.dir/src/Group.cpp.o CMakeFiles/main.dir/src/Student.cpp.o CMakeFiles/main.dir/src/Subject.cpp.o CMakeFiles/main.dir/src/UniversityDataBase.cpp.o -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture x86_64:
  "BinaryStreamObject<Department>::setEntityId(unsigned int)", referenced from:
      UniversityDataBase::addDepartment(Department*) in UniversityDataBase.cpp.o
  "BinaryStreamObject<Department>::readEntityId(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from:
      Department::readEntity(std::__1::basic_istream<char, std::__1::char_traits<char> >&) in Department.cpp.o
  "BinaryStreamObject<Department>::writeEntityId(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      Department::writeEntity(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Department.cpp.o
  "BinaryStreamObject<Group>::setEntityId(unsigned int)", referenced from:
      UniversityDataBase::addGroup(Group*) in UniversityDataBase.cpp.o
  "BinaryStreamObject<Group>::readEntityId(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from:
      Group::readEntity(std::__1::basic_istream<char, std::__1::char_traits<char> >&) in Group.cpp.o
  "BinaryStreamObject<Group>::writeEntityId(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      Group::writeEntity(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Group.cpp.o
  "BinaryStreamObject<Student>::setEntityId(unsigned int)", referenced from:
      UniversityDataBase::addStudent(Student*) in UniversityDataBase.cpp.o
  "BinaryStreamObject<Student>::readEntityId(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from:
      Student::readEntity(std::__1::basic_istream<char, std::__1::char_traits<char> >&) in Student.cpp.o
  "BinaryStreamObject<Student>::writeEntityId(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      Student::writeEntity(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Student.cpp.o
  "BinaryStreamObject<Subject>::setEntityId(unsigned int)", referenced from:
      UniversityDataBase::addSubject(Subject*) in UniversityDataBase.cpp.o
  "BinaryStreamObject<Subject>::readEntityId(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from:
      Subject::readEntity(std::__1::basic_istream<char, std::__1::char_traits<char> >&) in Subject.cpp.o
  "BinaryStreamObject<Subject>::writeEntityId(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      Subject::writeEntity(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Subject.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [main] Error 1
make[2]: *** [CMakeFiles/main.dir/all] Error 2
make[1]: *** [CMakeFiles/main.dir/rule] Error 2
make: *** [main] Error 2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2017, 11:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Линкер ругается и не может собрать проект (C++):

Проблема создал проект в builder 2009 а в 2007 builder проект не открывается может кто то сталкивался? - C++ Builder
Проблема создал проект в builder 2009 а в 2007 builder проект не открывается может кто то сталкивался? Суть проблемы у меня на компе 2009...

Собрать новый проект из существующих форм - C++ Builder
Возникла такая проблема я создал программу все прекрасно работало, но при последующей компиляции у меня ошибка линковщика, все формы...

Пятнашки - как собрать весь код в один проект и скомпилить - C++ Builder
Есть маленькая просьба по игре пятнашки: как собрать весь код в один проект и скомпилить exe файл? Текст программы ...

При попытке скомпилировать проект не может найти frxClass.hpp - C++ Builder
При компиляции получаю следующую ошибку: Unit5.h(10): 'frxClass.hpp' file not found. Как решить проблему? ПО: Rad Studio Berlin...

Ошибка ,линкер еррор - C++ Builder
Всем привет. Делаю прогу (инст), почти доделал, выскакивает ошибка Unresolved external 'output(otv_struct *, char *)' referenced from...

Extern или линкер ослеп - C++ Builder
Вобщем имеем в h файле namespace GL { extern unsigned ProcsCount; extern TProcDesc Procs; extern unsigned ModulesCount; ...

2
hoggy
6862 / 3069 / 525
Регистрация: 15.11.2014
Сообщений: 6,974
Завершенные тесты: 1
29.12.2017, 12:56 #2
Цитата Сообщение от ivansky Посмотреть сообщение
Пожалуйста, помогите понять причину, почему не собирается проект?

такое случается с плохими ленивыми мальчиками,
которым впадлу взять в руки и почитать букварь.

в этот хедер:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef OOPCOURSEWORK_BINARYSTREAMOBJECT_H
#define OOPCOURSEWORK_BINARYSTREAMOBJECT_H
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
template <class T>
class BinaryStreamObject {
public:
    unsigned int entityId = 0;
 
    static unsigned int readEntityId(istream&);
    void writeEntityId(ostream&);
    void setEntityId(unsigned int id);
 
    static T* readEntity(istream&);
    virtual void writeEntity(ostream&) = 0;
 
};
 
 
#endif //OOPCOURSEWORK_BINARYSTREAMOBJECT_H
необходимо перетащить всю реализацию из спп файла:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<class T>
unsigned int BinaryStreamObject<T>::readEntityId(istream& stream) {
    auto entityIdString = new char[10];
    stream.readsome(entityIdString, sizeof(unsigned short int));
    return static_cast<unsigned int>(stoi(entityIdString));
}
 
template<class T>
void BinaryStreamObject<T>::writeEntityId(ostream& stream) {
    const char* entityIdString = to_string(this->entityId).c_str();
    stream.write(entityIdString, sizeof(entityIdString));
}
 
template<class T>
void BinaryStreamObject<T>::setEntityId(unsigned int id) {
    this->entityId = id;
}
после чего файл BinaryStreamObject.cpp необходимо уничтожить.
0
ivansky
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 2
29.12.2017, 14:16  [ТС] #3
Цитата Сообщение от hoggy Посмотреть сообщение
которым впадлу взять в руки и почитать букварь.
Прошу прощения за мою неграмотность

Могу я узнать почему этот класс необходимо реализовывать в файле заголовков? Это как то связано с шаблонами?

Добавлено через 1 минуту
Все понял. Нашел объяснение.

https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2017, 14:16
Привет! Вот еще темы с ответами:

Линкер не находит реализацию стандартных функций - C++ Builder
Здравствуйте, у меня следующая проблема: с недавних пор линкер совсем обленился и не хочет грузить стандартные функции. Например,Как его...

Ругается линкер - Visual C++
Что-то приключилось с компилятором, всегда когда нормально уже напишу работающую программу, выдает ошибку: Ошибка 1 error LNK1123:...

Как собрать проект - Visual C++
Добрый день! Я пользуюсь Builder'ом, но сейчас необходимо собрать проект на Visual'е ... Исходники по этой ссылке...

Как собрать проект в Visual C++ 2010 - Visual C++
Подскажите как собрать проект для запуск на другом ПК так ,что бы он не требовал дополнительных библиотек из самой VS 2010. Слышал ,что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru