Я только начинаю с 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
Проблема в связывании фазы. Библиотека найдена правильно, потому что компилятор не выдает предупреждения о такой ситуации (я только что сделал тест сейчас).
сделать
> nm libspatialindex |grep SIDX_Version
для проверки существования символа в используемой вами библиотеке. Может быть, вместо этого libspatialindex_c?
По умолчанию libspatialindex
установить цель /usr/local
, Вы не изменили это в своем вызове ./configure
так вот где make install
установит вещи.
Компилятор знает, чтобы искать файлы в /usr/local/include
, так что компиляция не проблема. Однако он не знает, искать библиотеки в usr/local/lib
, Простое исправление — добавить это к шагу ссылки:
g++ -o spatial spatial.o -lspatialindex -lm -L/usr/local/lib