我在Ubuntu上使用sqlite3,并希望添加extension-functions.c文件提供的acos和asin函数。
https://github.com/seth/RSQLite.extfuns/blob/master/src/extension-functions.c
当我按照源代码中给出的说明操作时,我收到以下错误,但我没有找到任何关于如何使其工作的答案。我试过Ubuntu 15.04,15.10和现在的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);
^
这就是我的所作所为:
$ gcc -fPIC -lm -shared extension-functions.c -o libsqlitefunctions.so
的新文件夹中,如源代码所示。=>然后我得到上面提到的错误。
我在做什么?
答案 0 :(得分:3)
总结一下我的所作所为:
我修改了文件以包含<inttypes.h>
并按照Mohit Jain的指示更改了printf
语句。
然后我执行了
gcc -fPIC -shared extension-functions.c -o libsqlitefunctions.so -lm
编译c文件。请注意,-lm
已结束。显然这很重要。
之后,您可以通过调用
添加libsqlitefunctions.so
SELECT load_extension('/full/path/to/libsqlitefunctions.so');
在调用任何新的数学函数之前。
干杯, d。
PS:如果您想将它与Doctrine一起使用,您可能需要关注this thread。
答案 1 :(得分:2)
打印int64_t
的正确方法是:
#include <inttypes.h>
...
printf("%d => %" PRId64 "\n", ee, c);
在您的程序/库中,您可以更改打印方式以获得所需的结果。
可以找到完整的打印格式列表here。您可以使用脚本来修复打印。