Как установить расширение-functions.c для sqlite3 на ubuntu

Я использую sqlite3 на Ubuntu и хотел бы добавить функции acos и asin, которые предоставляются файлом расширения-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); ^ 

Вот что я сделал:

  • Я установил sqlite3, libsqlite3-0, libsqlite3-3: i386 и libsqlite3-dev.
  • Я загрузил расширение-functions.c в новую папку
  • внутри новой папки я выполнил $ gcc -fPIC -lm -shared extension-functions.c -o libsqlitefunctions.so как было предложено в исходном коде.

=>, а затем я получаю ошибку, упомянутую выше.

Что я делаю?

Правильный способ печати int64_t :

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

В вашей программе / библиотеке вы можете изменить способ печати, чтобы получить желаемый результат.

Полный список форматов печати можно найти здесь . Вы можете использовать скрипт для исправления печати.

Подводя итог тому, что я сделал:

Я изменил файл, включив в него и изменил инструкции printf как указано Mohit Jain.

Затем я выполнил

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

для компиляции c-файла. Обратите внимание, что -lm находится в конце. По-видимому, это имеет значение.

После этого вы можете включить libsqlitefunctions.so , позвонив

SELECT load_extension('/full/path/to/libsqlitefunctions.so');

перед вызовом любой из новых математических функций.

Cheers, D.

PS: если вы хотите использовать его с Doctrine, вы можете следовать этой теме .