janwielemaker / ffi Goto Github PK
View Code? Open in Web Editor NEWSWI-Prolog dynamic C interface
License: BSD 2-Clause "Simplified" License
SWI-Prolog dynamic C interface
License: BSD 2-Clause "Simplified" License
On Ubuntu 22.04 LTS on WSL 2 on Windows 10 with SWI-Prolog 8.5.15
groot@Galaxy:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
?- version.
Welcome to SWI-Prolog (threaded, 64 bits, version 8.5.15-86-g5a3743ab9)
?- pack_rebuild(ffi).
results in
% ERROR: /home/groot/.local/share/swi-prolog/pack/ffi/test/test_libc.pl:88:
% test stat: failed
due to this line
once(source_file(_:stat(_,_), File)),
Changing to
once(source_file(File)),
results in success.
On a mac with os Mojave, swipl 8.1.3-26-g30498cd0a
doesn't compile, I get
% /Users/rzf/lib/swipl/bin/x86_64-darwin/swipl-ld -Wall -shared -O2 -gdwarf-2 -g3 -o lib/x86_64-darwin/ffi4pl.so c/ffi4pl.c -lffi
ERROR: In file included from c/ffi4pl.c:40:
ERROR: /Users/rzf/lib/swipl/include/SWI-Stream.h:58:10: fatal error: 'wchar.h' file not found
ERROR: #include <wchar.h>
ERROR: ^~~~~~~~~
% 1 error generated.
% /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc returned code 256
% *** /Users/rzf/lib/swipl/bin/x86_64-darwin/swipl-ld exit status 1
% make: *** [lib/x86_64-darwin/ffi4pl.so] Error 1
ERROR: Process "process(path(make),[all])": exit status: 2
ERROR: In:
ERROR: [14] throw(error(process_error(...,...),_14266))
ERROR: [12] '$apply':forall(prolog_pack:member(all,...),prolog_pack:run_process(...,...,...)) at /Users/rzf/lib/swipl/boot/apply.pl:51
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more
´´´
Building needs to makedir $PACKSODIR
My troubleshooting steps
% Cloning into '/opt/logicmoo_workspace/packs_lib/ffi'...
Verify package status (anonymously)
at "http://www.swi-prolog.org/pack/query" Y/n? n
Package: ffi
Title: Dynamically call C functions
Installed version: 0.1
Author: Jan Wielemaker <[email protected]>
Maintainer: Jan Wielemaker <[email protected]>
Packager: Jan Wielemaker <[email protected]>
Home page: https://github.com/JanWielemaker/ffi.git
Download URL: https://github.com/JanWielemaker/ffi/archive/V*.zip
Run post installation scripts for pack "ffi" Y/n?
% checking for gcc...
% gcc
% checking whether the C compiler works...
% yes
% checking for C compiler default output file name... a.out
% checking for suffix of executables...
%
% checking whether we are cross compiling...
% no
% checking for suffix of object files...
% o
% checking whether we are using the GNU C compiler...
% yes
% checking whether gcc accepts -g...
% yes
% checking for gcc option to accept ISO C89...
% none needed
% checking how to run the C preprocessor...
% gcc -E
% checking for grep that handles long lines and -e...
% /bin/grep
% checking for egrep...
% /bin/grep -E
% checking for ANSI C header files...
% yes
% checking for sys/types.h...
% yes
% checking for sys/stat.h...
% yes
% checking for stdlib.h...
% yes
% checking for string.h...
% yes
% checking for memory.h...
% yes
% checking for strings.h...
% yes
% checking for inttypes.h...
% yes
% checking for stdint.h...
% yes
% checking for unistd.h...
% yes
% checking ffi.h usability...
% yes
% checking ffi.h presence...
% yes
% checking for ffi.h...
% yes
% checking ffi/ffi.h usability...
% no
% checking ffi/ffi.h presence...
% no
% checking for ffi/ffi.h...
% no
% checking dlfcn.h usability...
% yes
% checking dlfcn.h presence...
% yes
% checking for dlfcn.h...
% yes
% configure: creating ./config.status
% config.status: creating config.h
% mkdir -p lib/
% /root/lib/swipl-7.7.10/bin/x86_64-linux/swipl-ld -Wall -shared -O2 -gdwarf-2 -g3 -o lib/x86_64-linux/ffi4pl.so c/ffi4pl.c -lffi
% /usr/bin/ld: cannot open output file lib/x86_64-linux/ffi4pl.so:
So I went to the pack install dir
root@gitlab:/opt/logicmoo_workspace/packs_lib/ffi# make
mkdir -p lib/
/root/lib/swipl-7.7.10/bin/x86_64-linux/swipl-ld -Wall -shared -O2 -gdwarf-2 -g3 -o lib/x86_64-linux/ffi4pl.so c/ffi4pl.c -lffi
/usr/bin/ld: cannot open output file lib/x86_64-linux/ffi4pl.so: No such file or directory
collect2: error: ld returned 1 exit status
gcc returned code 256
*** /root/lib/swipl-7.7.10/bin/x86_64-linux/swipl-ld exit status 1
Makefile:23: recipe for target 'lib/x86_64-linux/ffi4pl.so' failed
make: *** [lib/x86_64-linux/ffi4pl.so] Error 1
Created directory and ran make
root@gitlab:/opt/logicmoo_workspace/packs_lib/ffi# mkdir 'lib/x86_64-linux/'
root@gitlab:/opt/logicmoo_workspace/packs_lib/ffi# make
mkdir -p lib/
/root/lib/swipl-7.7.10/bin/x86_64-linux/swipl-ld -Wall -shared -O2 -gdwarf-2 -g3 -o lib/x86_64-linux/ffi4pl.so c/ffi4pl.c -lffi
root@gitlab:/opt/logicmoo_workspace/packs_lib/ffi#
succeeded
Hello! Thank you for this project
I try to use it for call a ioctl(2) function.
The prototype of this function is int ioctl(int fd, unsigned long request, struct termios *term);
What I need is to declare a termios struct variable, and to call the ioctl
function with a pointer on this variable.
So I have defined library and my prototype of functions like this:
#!/usr/bin/swipl
:- use_module(library(ffi)).
:- use_module(library(cerror)).
:- c_import("#include <sys/ioctl.h>
#include <termios.h>",
[ 'libc' ], [
ioctl(int, ulong, -struct(termios), [int])
]).
I imagined declare a termios struct like this but c_alloc(Ptr, -struct(termios))
returned false.
:- initialization(main, main).
main(_Argv) :-
c_alloc(Ptr, -struct(termios)), % ==> false
ioctl(0, 21509, Ptr, _), nl.
Do can you help me with that?
Does this code base have the same license as SWI-Prolog's BSD2 license?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.