I use sqlite3 on Ubuntu and would like to add the acos and asin functions that are provided by the extension-functions.c file.
https://github.com/seth/RSQLite.extfuns/blob/master/src/extension-functions.c
When I follow the instructions given in the source code, I get the following error and I didn't find any answer on how I could get this working. I tried on Ubuntu 15.04, 15.10 and now 16.04.
extension-functions.c: In function ‘print_elem’:
extension-functions.c:1942:10: warning: format ‘%lld’ expects argument of type ‘long long int’, but argument 3 has type ‘int64_t {aka long int}’ [-Wformat=]
printf("%d => %lld\n", ee,c);
^
Here's what I did:
- I installed sqlite3, libsqlite3-0, libsqlite3-3:i386, and libsqlite3-dev.
- I downloaded the extension-functions.c into a new folder
- inside the new folder I executed
$ gcc -fPIC -lm -shared extension-functions.c -o libsqlitefunctions.so
as suggested in the source code.
=> and then I get the error mentioned above.
What am I doing wong?
Correct way to print an
int64_t
is:In your program / library, you can change the way you print to get the desired result.
Complete list of print formats can be found here. You can use a script to fix the printing.
To summarize what I did:
I modified the file to include the
<inttypes.h>
and changed theprintf
statements as instructed by Mohit Jain.Then I executed
gcc -fPIC -shared extension-functions.c -o libsqlitefunctions.so -lm
to compile the c file. Note that the
-lm
is at the end. Apparently this does matter.After that you can include the
libsqlitefunctions.so
by callingSELECT load_extension('/full/path/to/libsqlitefunctions.so');
before calling any of the new math functions.
Cheers, D.
PS: if you want to use it with Doctrine, you might want to follow this thread.