How to install extension-functions.c for sqlite3 on ubuntu

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

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?

回答1:

Correct way to print an int64_t is:

#include <inttypes.h> ... printf("%d => %" PRId64 "\n", ee, c); 

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.



回答2:

To summarize what I did:

I modified the file to include the <inttypes.h> and changed the printf 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 calling

SELECT 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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!