9 releases

0.3.6 Feb 20, 2024
0.3.5 Aug 3, 2023
0.3.4 Aug 13, 2022
0.3.3 Jan 24, 2022
0.1.0 Apr 28, 2021

#12 in #foreign

Download history 22/week @ 2024-02-04 28/week @ 2024-02-11 238/week @ 2024-02-18 103/week @ 2024-02-25 44/week @ 2024-03-03 82/week @ 2024-03-10 59/week @ 2024-03-17 24/week @ 2024-03-24 80/week @ 2024-03-31 93/week @ 2024-04-07 28/week @ 2024-04-14 33/week @ 2024-04-21 22/week @ 2024-04-28 20/week @ 2024-05-05 21/week @ 2024-05-12 20/week @ 2024-05-19

86 downloads per month
Used in swipl


73 lines

swipl-fli - low-level bindings for SWI-Prolog's foreign language interface

This crate provides low-level bindings for SWI-Prolog's foreign language interface. The bindings are generated using bindgen. SWI-Prolog's header files and shared library are discovered by using the swipl binary found either on PATH or in the SWIPL environment variable.


Runtime library discovery

Unless SWI-Prolog's dynamic library is automatically discoverable by your operating system, running anything that depends on this crate, including unit tests, will fail with an error saying that the shared library cannot be found. Unfortunately, it does not seem to be possible to embed the library's location at compile time in a portable way.

In order to make things run, you'll have to add the shared library's directory to the library load path. On linux, this can be done by setting the environment LD_LIBRARY_PATH. For example,

LD_LIBRARY_PATH=/home/matthijs/.swivm/lib/x86_64-linux/:$LD_LIBRARY_PATH cargo test

This is pretty cumbersome. To help out, consider installing cargo-swipl. With cargo-swipl, the above turns into this:

cargo swipl test

For a more permanent solution, consider using a tool like chrpath to embed the library's location in your binary. Alternatively, you can let SWI-Prolog handle the building of standalone binaries, by loading your native library in a swipl process and performing a qsave.


~36K SLoC