【问题标题】:How to install extension-functions.c for sqlite3 on ubuntu如何在 ubuntu 上为 sqlite3 安装 extension-functions.c
【发布时间】:2016-04-29 12:07:03
【问题描述】:

我在 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。

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

我在做什么啊?

【问题讨论】:

标签: c++ c ubuntu sqlite


【解决方案1】:

总结一下我做了什么:

我修改了文件以包含 <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。

【讨论】:

  • 我需要添加 -lm 标签以及 sudo apt-get install libsqlite3-dev
【解决方案2】:

打印int64_t 的正确方法是:

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

在您的程序/库中,您可以更改打印方式以获得所需的结果。

可以在here 找到完整的打印格式列表。您可以使用脚本来修复打印。

【讨论】:

  • 这不是我的图书馆。我还没有写过 C 或 C++。所以你说我应该在源代码开头的某处添加#include &lt;inttypes.h&gt;并修改所有printf语句?!
  • @Dominik 很高兴它对您有所帮助。
猜你喜欢
  • 2019-03-28
  • 2011-12-24
  • 2023-03-15
  • 2013-03-06
  • 2011-08-12
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多