Получение неопределенной ссылочной ошибки при добавлении простого класса в библиотеку - PullRequest
0 голосов
/ 25 июля 2011

Я работаю с довольно большой библиотекой, которая использует CMake для компиляции / компоновки. Мне нужно добавить некоторые функции, поэтому мне нужно добавить некоторые классы в библиотеку. Проблема в том, что когда я добавляю в библиотеку даже простой класс helloWorld и пытаюсь вызвать его из какой-то основной функции, я получаю неопределенную проблему со ссылками во время соединения. Когда я изучил встроенный код («CMakeFiles» в папке библиотеки), мой класс не был скомпилирован CMake (и, например, там нет файла HelloWorld.o).

Может кто-нибудь указать, где я иду не так? Нужно ли явно указывать CMake для компиляции этого класса? (если да, то как?). Я новичок в CMake, поэтому не знаю, как решить эту проблему.

Я вызываю функцию вот так. ``

GSROrdinary sord;

Я получаю сообщение об ошибке, похожее на это.

undefined reference to beep::GSROrdinary::GSROrdinary()
undefined reference to beep::GSROrdinary::~GSROrdinary()

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Да, вы должны сказать CMake для компиляции вашего класса. Я предлагаю вам ознакомиться с некоторыми учебными пособиями по CMake, которые можно найти в Интернете. Вот хороший пример: http://www.cs.swarthmore.edu/~adanner/tips/cmake.php - обратите особое внимание на файл CMakeLists.txt и его синтаксис. Вам нужно будет изменить CMakeLists.txt вашей библиотеки, чтобы добавить новый класс.

1 голос
/ 25 июля 2011

Вы должны явно добавить новый файл в файл CMake, чтобы они были скомпилированы и связаны.

Этот прокомментированный пример может дать вам начало (в основном вы должны искать директиву add_library (LIBNAME files) в одном из ваших файлов CMakeLists.txt и добавлять туда новый файл, но вы также должны прочитать документация .

...