Ticket #91 (new bug report)

Opened 3 years ago

Last modified 3 years ago

pgrouting module does not link properly on OSX

Reported by: kyngchaos Owned by:
Priority: minor Milestone:
Component: pgRouting package Version: 1.0
Keywords: Cc:


Postgres modules on OSX should be loadable modules, or bundles, not dynamic libraries. There is a difference on OSX. -bundle is the flag used instead of -dynamiclib, and bundles don't need the install_name or version flags. pgxs also adds -multiply_defined suppress. The standard file extension for a bundle on OSX is the same as a library on linux - .so - but version numbers (if used) are still put before the suffix.

So, the basic link command for OSX would be:

c++ -bundle -multiply_defined suppress -o librouting.so

(plus the object files and extra configured flags)

Change History

Changed 3 years ago by kyngchaos

It looks like the bundle option for cmake is MODULE, ie:


Changed 3 years ago by kyngchaos

Oh, and -bundle_loader is needed so it sees (but doesn't link) symbols in the postgres executable:

-bundle_loader /usr/local/pgsql/bin/postgres

(or wherever postgres is configured to be found)

Changed 3 years ago by kyngchaos

More notes.

According to the cmake docs, the MODULE option drops back to SHARED on non-darwin platforms, so it doesn't need to be conditionalized in cmakelists.txt.

I was able to insert the extra bundle_loader flag with:

SET_TARGET_PROPERTIES(routing PROPERTIES LINK_FLAGS "-bundle_loader /usr/local/pgsql/bin/postgres")

This would have to be conditionalized on OSX or darwin somehow, I didn't get that far in the cmake docs. It would also need to use the configured/found postgres path.

Note: See TracTickets for help on using tickets.