'неопределенная ссылка на `shogun::SGRefObject::unref()' при компиляции с объектом .so

Я получаю эту ошибку, когда пытаюсь скомпилировать тест ядра Гаусса, указанный на странице разработчика shogun по адресу
https://github.com/shogun-toolbox/shogun/wiki/README_developer.
Я следовал инструкциям по созданию библиотеки .so shogun по адресу https://github.com/shogun-toolbox/shogun/wiki/INSTALL.
Затем я пошел в каталог выше, чем тот, который содержит общую библиотеку объектов, и выдал заказ "g++ GTest.cpp shogun/libshogun.so -o a.out", и мне была выдана ошибка, которая является темой этого поста. не могу найти данное решение.
Кто-нибудь знает, как это решить?


person ConfusedGrammer    schedule 10.07.2016    source источник


Ответы (1)


вы не должны пытаться напрямую связать общую библиотеку с вашим примером. Скажем, вы создали пример файла на основе сёгуна, назовем его shogun_example.cpp, чтобы скомпилировать его, вы должны запустить:

g++ shogun_example.cpp -o shogun_example -lshogun

это на тот случай, если libshogun.so находится в пути поиска компоновщика.

Если скомпилированный libshogun.so отсутствует в пути поиска, вы должны указать расположение разделяемой библиотеки компилятору с помощью -L, например:

g++ shogun_example.cpp -o shogun_example -L<path to the shogun shard lib> -lshogun

person Viktor    schedule 24.07.2016
comment
К сожалению, это не сработало. Я использую инструкцию g++ -std=c++11 -DHAVE_EIGEN3 classifier_gaussian_process_binary_classification.cpp -o classgp -lshogun в попытке скомпилировать пример в папке с примерами и получаю белье, оставшееся от неопределенных ссылок. Я установил каждую переменную поиска включения g++ в папку /usr/local/include, в которой shogun сохранил свою папку включения после установки. Я также установил переменную LD_LIBRARY_PATH, чтобы сёгун мог найти общую библиотеку. Я могу скомпилировать другие примеры, и я установил eigen 3 с помощью apt-get. - person ConfusedGrammer; 07.09.2016
comment
Решил проблему. Оказывается, OpenCL является зависимостью, и я упустил это из виду, потому что не читал текст, когда устанавливал общую библиотеку с помощью cmake. Урок здесь состоит в том, чтобы читать инструкции cmake во время установки, независимо от того, насколько простые инструкции на сайте делают установку лол. Спасибо, что терпишь меня. - person ConfusedGrammer; 09.09.2016