[pgrouting-users] Linking .cpp defined functions

Sylvain Housseman hsylvio at gmail.com
Wed Jun 27 06:46:25 PDT 2012


Hi,

I am trying to add a function: 1-to-many dijkstra shortest path.
Thus I downloaded the last git and added a folder named 1toNsp in 
"extra", which contains tomanysp.h, tomanysp.c and boost_wrapper_tomany.cpp.

These files are highly inspired from the dijkstra.h, dijkstra.c and 
boost_wrapper.cpp files that are in the "core" directory.
-actually for now it's mainly a copy/paste of them-

I also created a .sql in extra/1toNsp/sql to define the function 
onetomany_dijkstra_shortest_path(text, int, int array, boolean ,boolean).
I checked if this function exists by returning the distance between 
source and the first target only, using boost_dijkstra; this works well \o/.

Now I want the (static int compute_tomany_shortest_path(char* sql, int 
start_vertex,
                                  int *end_vertices, int nb_targets, 
bool directed,
                                  bool has_reverse_cost,
                                  path_element_t **path, int 
*path_count)) function to call a function defined in 
boost_dijkstra_tomany.cpp (named boost_dijkstra_tomany(...)).

Problem is that when I call
     routing=> SELECT * FROM onetomany_dijkstra_sp('SELECT gid AS id, 
source::int4,
              target::int4, length::double precision AS 
cost,length::double precision
         AS reverse_cost FROM ways', 3, '{7,18,179}', true, true);
I get
     ERROR:  could not load library 
"/usr/lib/postgresql/9.1/lib/librouting_tomanysp.so": 
/usr/lib/postgresql/9.1/lib/librouting_tomanysp.so: undefined symbol: 
                 boost_dijkstra_tomany

This function (int boost_dijkstra_tomany(......)) is declared in 
tomanysp.h and called from tomanysp.c; while it is defined in 
boost_wrapper_tomany.cpp (which #includes "tomanysp.h"); once again it 
looks the same as what is done with dijkstra.h, dijkstra.c and 
boost_wrapper.cpp.

my /extra/1toNsp/src/CMakeLists.txt is :
     SET(LIBRARY_OUTPUT_PATH ../../../lib/)*
*    ADD_LIBRARY(routing_tomany SHARED boost_wrapper_tomany.cpp 
tomanysp.c tomanysp.h)
     INSTALL(TARGETS routing_tomany DESTINATION ${LIBRARY_INSTALL_PATH})*

*Could someone tell me what I am missing?

--------------
Using postgresql 9.1 with ubuntu 11.10.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/pgrouting-users/attachments/20120627/84b4d313/attachment.html>


More information about the Pgrouting-users mailing list