如何在ubuntu

时间:2016-04-29 12:07:03

标签: c++ c ubuntu sqlite

我在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);
          ^

这就是我的所作所为:

  • 我安装了sqlite3,libsqlite3-0,libsqlite3-3:i386和libsqlite3-dev。
  • 我将extension-functions.c下载到新文件夹
  • 在我执行$ gcc -fPIC -lm -shared extension-functions.c -o libsqlitefunctions.so的新文件夹中,如源代码所示。

=>然后我得到上面提到的错误。

我在做什么?

2 个答案:

答案 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。您可以使用脚本来修复打印。