2016-04-29 13 views
1

私はUbuntuでsqlite3を使用していますが、extension-functions.cファイルで提供されているacos関数とasin関数を追加したいと考えています。私は、ソースコードの指示に従った場合ubuntuにsqlite3のextension-functions.cをインストールするには

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

は、ここに私がやったことだ:I386、とのlibsqlite3-devの:

  • 私はsqlite3の、libsqlite3-0に関する、libsqlite3-3をインストールしました。
  • 新しいフォルダに
  • をダウンロードしました。$ gcc -fPIC -lm -shared extension-functions.c -o libsqlitefunctions.soをソースコードのように実行しました。

=>上記のエラーが発生します。

私は何をしていますか? int64_tを印刷する

+0

[この投稿](http://stackoverflow.com/questions/6299083/cross-platform-printing-of-64-bit-integers-with-printf)が役に立ちます。 – LPs

答えて

1

正しい方法は次のとおりです。あなたのプログラム/ライブラリで

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

、あなたが希望する結果を得るために印刷する方法を変更することができます。

hereの印刷フォーマットの完全なリストがあります。スクリプトを使用して印刷を修正することができます。

+0

私のライブラリではありません。私はまだCやC++を書いたことはありません。 ソースコードの先頭に '#include 'を追加し、すべての' printf'文を修正するといいでしょうか? – Dominik

+1

それは働いた。どうもありがとう。 – Dominik

+0

@ドミニク私はそれがあなたを助けてくれてうれしいです。 –

2

私がやったことを要約すると:

私は<inttypes.h>が含まれるようにファイルを変更し、Mohitジャイナ教の指示どおりprintf文を変更しました。

は、それから私は、cファイルをコンパイルする

gcc -fPIC -shared extension-functions.c -o libsqlitefunctions.so -lm

を実行します。 -lmが最後にあることに注意してください。明らかにこれは問題です。新しい数学関数のいずれかを呼び出す前にSELECT load_extension('/full/path/to/libsqlitefunctions.so');

を呼び出すことによってlibsqlitefunctions.soを含めることができ

後。

乾杯、 D.

PS:あなたは教義とそれを使用したい場合は、あなたがthis threadに従うことをお勧めします。

+0

-lmタグを追加する必要がありました。sudo apt-get install libsqlite3-dev – isebarn

関連する問題