пространственный индекс — неопределенная ссылка на функции libspatialindex в переполнении стека

Я только начинаю с libspatialindex. Я пробежал инструкции по установке на http://libspatialindex.github.io/install.html и он установил нормально на Ubuntu с помощью следующих команд (за исключением того, что я не мог найти autogen.sh, о котором он упоминает).

./configure
make
sudo make install

Затем я сделал очень простую программу для тестирования следующим образом (на основе https://github.com/libspatialindex/libspatialindex/wiki/Simple-Tutorial )

#include <spatialindex/capi/sidx_api.h>
using namespace SpatialIndex;
int main(int argc, char* argv[])
{
char* pszVersion = SIDX_Version();
}

и скомпилируйте так:

g++ -lspatialindex spatial.cpp -o spatial

и это дает мне ошибку:

/tmp/ccACK3p4.o: In function `main':
spatial.cpp:(.text+0xa): undefined reference to `SIDX_Version'
collect2: ld returned 1 exit status

Я пробовал много разных вещей, таких как использование cmake вместо этого и установка его в другую папку, но не повезло. Есть идеи?

РЕДАКТИРОВАТЬ:

Добавил пространство имен SpatialIndex выше, и я также попробовал следующее, но все же не удача:

g++ -c -o spatial.o spatial.cpp
g++ -o spatial spatial.o -lspatialindex -lm

0

Решение

Проблема в связывании фазы. Библиотека найдена правильно, потому что компилятор не выдает предупреждения о такой ситуации (я только что сделал тест сейчас).
сделать

> nm libspatialindex |grep SIDX_Version

для проверки существования символа в используемой вами библиотеке. Может быть, вместо этого libspatialindex_c?

1

Другие решения

По умолчанию libspatialindex установить цель /usr/local, Вы не изменили это в своем вызове ./configureтак вот где make install установит вещи.

Компилятор знает, чтобы искать файлы в /usr/local/include, так что компиляция не проблема. Однако он не знает, искать библиотеки в usr/local/lib, Простое исправление — добавить это к шагу ссылки:

g++ -o spatial spatial.o -lspatialindex -lm -L/usr/local/lib
0

По вопросам рекламы [email protected]