Re: [sqlite] loading extension csv.c
On 2/7/20 3:14 PM, Jens Alfke wrote: On Feb 7, 2020, at 9:11 AM, chiahui chen wrote: /usr/include/sqlite3ext.h:437:53: note: expanded from macro 'sqlite3_vsnprintf' #define sqlite3_vsnprintf sqlite3_api->vsnprintf ~~~ ^ /usr/include/secure/_stdio.h:75:3: note: expanded from macro 'vsnprintf' __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap) ^ This appears to be your problem. The system header is defining `vsnprintf` as a macro that expands to a compiler builtin. This is conflicting with a struct field named `vsnprintf` in the SQLite extension API. I've never heard of before, although it does exist in the macOS SDK. Looking through the normal , it does include that header at the end: #if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus) /* Security checking functions. */ #include #endif So it looks like the trigger is that you're somehow building with _FORTIFY_SOURCE defined, and the others are not. Anyway, I think you could work around the problem by editing csv.c and inserting something like this at the top: #include #undef vsnprintf Or else figuring out how to turn off _FORTIFY_SOURCE. —Jens PS: Your use of `gcc` in the command line confused me briefly — turns out `gcc` on macOS is simply an alias for `cc`, so it invokes Clang. If you really want GCC for some reason you'd have to install it yourself and put it in your $PATH before /usr/bin. It looks like that header (sys/_stdio.h) is non-conforming. The C Standard does allow the stdio.h header to define a macro for the name vsnprintf, but that macro must be a *function-like* macro (7.1.4p1 in the C17 Standard) which it appears not to be (as that shouldn't cause a problem with the shown code). -- Richard Damon ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] loading extension csv.c
> On Feb 7, 2020, at 9:11 AM, chiahui chen wrote: > > /usr/include/sqlite3ext.h:437:53: note: expanded from macro > 'sqlite3_vsnprintf' > > #define sqlite3_vsnprintf sqlite3_api->vsnprintf > > ~~~ ^ > > /usr/include/secure/_stdio.h:75:3: note: expanded from macro 'vsnprintf' > > __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap) > > ^ This appears to be your problem. The system header is defining `vsnprintf` as a macro that expands to a compiler builtin. This is conflicting with a struct field named `vsnprintf` in the SQLite extension API. I've never heard of before, although it does exist in the macOS SDK. Looking through the normal , it does include that header at the end: #if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus) /* Security checking functions. */ #include #endif So it looks like the trigger is that you're somehow building with _FORTIFY_SOURCE defined, and the others are not. Anyway, I think you could work around the problem by editing csv.c and inserting something like this at the top: #include #undef vsnprintf Or else figuring out how to turn off _FORTIFY_SOURCE. —Jens PS: Your use of `gcc` in the command line confused me briefly — turns out `gcc` on macOS is simply an alias for `cc`, so it invokes Clang. If you really want GCC for some reason you'd have to install it yourself and put it in your $PATH before /usr/bin. ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] loading extension csv.c
Hi Dr. Hipp, Thank you very much. I tried the suggested solution. sqlite3 was downloaded and compiled. Then ran : gcc -g -l. -fPIC -dynamiclib ./ext/csv.c -o csv.dylib the same errors occurred again. ./ext/csv.c:115:3: error: no member named '__builtin___vsnprintf_chk' in 'struct sqlite3_api_routines' sqlite3_vsnprintf(CSV_MXERR, p->zErr, zFormat, ap); ^ /usr/include/sqlite3ext.h:437:53: note: expanded from macro 'sqlite3_vsnprintf' #define sqlite3_vsnprintf sqlite3_api->vsnprintf ~~~ ^ /usr/include/secure/_stdio.h:75:3: note: expanded from macro 'vsnprintf' __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap) ^ ./ext/csv.c:115:21: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const void *' [-Wint-conversion] sqlite3_vsnprintf(CSV_MXERR, p->zErr, zFormat, ap); ^ ./ext/csv.c:67:19: note: expanded from macro 'CSV_MXERR' #define CSV_MXERR 200 ^~~ /usr/include/secure/_stdio.h:75:57: note: expanded from macro 'vsnprintf' __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap) ^~~ /usr/include/secure/_common.h:39:54: note: expanded from macro '__darwin_obsz' #define __darwin_obsz(object) __builtin_object_size (object, _USE_FORTIFY_LEVEL > 1 ? 1 : 0) ^~ ./ext/csv.c:568:5: error: use of undeclared identifier 'sqlite3_str' sqlite3_str *pStr = sqlite3_str_new(0); ^ ./ext/csv.c:568:18: error: use of undeclared identifier 'pStr' sqlite3_str *pStr = sqlite3_str_new(0); ^ ./ext/csv.c:568:25: warning: implicit declaration of function 'sqlite3_str_new' is invalid in C99 [-Wimplicit-function-declaration] sqlite3_str *pStr = sqlite3_str_new(0); ^ ./ext/csv.c:571:5: warning: implicit declaration of function 'sqlite3_str_appendf' is invalid in C99 [-Wimplicit-function-declaration] sqlite3_str_appendf(pStr, "CREATE TABLE x("); ^ ./ext/csv.c:571:25: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr, "CREATE TABLE x("); ^ ./ext/csv.c:581:29: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr, "%sc%d TEXT", zSep, iCol); ^ ./ext/csv.c:588:31: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr,"%s\"%w\" TEXT", zSep, z); ^ ./ext/csv.c:597:31: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr,"%sc%d TEXT", zSep, ++iCol); ^ ./ext/csv.c:603:25: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr, ")"); ^ ./ext/csv.c:604:18: warning: implicit declaration of function 'sqlite3_str_finish' is invalid in C99 [-Wimplicit-function-declaration] CSV_SCHEMA = sqlite3_str_finish(pStr); ^ ./ext/csv.c:604:37: error: use of undeclared identifier 'pStr' CSV_SCHEMA = sqlite3_str_finish(pStr); ^ ./ext/csv.c:643:27: error: use of undeclared identifier 'SQLITE_VTAB_DIRECTONLY' sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY); ^ 4 warnings and 10 errors generated. Here is Mac terminal sqlite3 compiling process if it can shed light on the extension compiling errors. ./configure && make checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... ./install-sh -c -d checking for gawk... no checking for mawk... no checking for nawk... no checking for awk... awk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for style of include used by make... GNU checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking whether gcc understands -c and -o together... yes checking dependency style of gcc... gcc3 checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... no checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking whether gcc understands -c and -o together... (cached) yes checking dependency style
Re: [sqlite] loading extension csv.c
> On 2/7/20, chiahui chen wrote: >> >> I tried the suggested solution. sqlite3 was >> downloaded and compiled. >> Then ran : gcc -g -l. -fPIC -dynamiclib ./ext/csv.c -o csv.dylib ^^^ Is this a typo? This should read gcc -I. >> the same errors occurred again. >> >> Is there any suggestion? Just in case if my Mac operating system provides >> some info (macOS High Sierra version 10.13.6) >> ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] loading extension csv.c
On 2/7/20, chiahui chen wrote: > > I tried the suggested solution. sqlite3 was > downloaded and compiled. > Then ran : gcc -g -l. -fPIC -dynamiclib ./ext/csv.c -o csv.dylib > the same errors occurred again. > > Is there any suggestion? Just in case if my Mac operating system provides > some info (macOS High Sierra version 10.13.6) > That command works fine for me on my iMac. I have no idea why it is failing for you. -- D. Richard Hipp d...@sqlite.org ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] loading extension csv.c
On 2/6/20, chiahui chen wrote: > Hi, > > After few attempts to load csv extension, (already tried > > gcc -arch x86_64 -g -fPIC -dynamiclib csv.c -o csv.dylib > > and > > gcc -g -fPIC -dynamiclib csv.c -o csv.dylib > ) > Mac terminal returns errors as followings: I don't know what is causing your errors. But I can show you what works for me, on a Mac: (1) Unpack the SQLite source-code tarball for version 3.31.1 (2) Run: ./configure && make (3) Run: gcc -g -I. -fPIC -dynamiclib ext/misc/csv.c -o csv.dylib (4) Run: ./sqlite3 (5) Within the SQLite command-line shell, do: .load ./csv I suspect that the -I. is the option that you need, so that the build will pick up a proper sqlite3ext.h file, and not whatever sqlite3ext.h file that Apple has installed. But that is just my guess. -- D. Richard Hipp d...@sqlite.org ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
[sqlite] loading extension csv.c
Hi, After few attempts to load csv extension, (already tried gcc -arch x86_64 -g -fPIC -dynamiclib csv.c -o csv.dylib and gcc -g -fPIC -dynamiclib csv.c -o csv.dylib ) Mac terminal returns errors as followings: csv.c:115:3: error: no member named '__builtin___vsnprintf_chk' in 'struct sqlite3_api_routines' sqlite3_vsnprintf(CSV_MXERR, p->zErr, zFormat, ap); ^ /usr/include/sqlite3ext.h:437:53: note: expanded from macro 'sqlite3_vsnprintf' #define sqlite3_vsnprintf sqlite3_api->vsnprintf ~~~ ^ /usr/include/secure/_stdio.h:75:3: note: expanded from macro 'vsnprintf' __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap) ^ csv.c:115:21: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const void *' [-Wint-conversion] sqlite3_vsnprintf(CSV_MXERR, p->zErr, zFormat, ap); ^ csv.c:67:19: note: expanded from macro 'CSV_MXERR' #define CSV_MXERR 200 ^~~ /usr/include/secure/_stdio.h:75:57: note: expanded from macro 'vsnprintf' __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap) ^~~ /usr/include/secure/_common.h:39:54: note: expanded from macro '__darwin_obsz' #define __darwin_obsz(object) __builtin_object_size (object, _USE_FORTIFY_LEVEL > 1 ? 1 : 0) ^~ csv.c:568:5: error: use of undeclared identifier 'sqlite3_str' sqlite3_str *pStr = sqlite3_str_new(0); ^ csv.c:568:18: error: use of undeclared identifier 'pStr' sqlite3_str *pStr = sqlite3_str_new(0); ^ csv.c:568:25: warning: implicit declaration of function 'sqlite3_str_new' is invalid in C99 [-Wimplicit-function-declaration] sqlite3_str *pStr = sqlite3_str_new(0); ^ csv.c:571:5: warning: implicit declaration of function 'sqlite3_str_appendf' is invalid in C99 [-Wimplicit-function-declaration] sqlite3_str_appendf(pStr, "CREATE TABLE x("); ^ csv.c:571:25: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr, "CREATE TABLE x("); ^ csv.c:581:29: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr, "%sc%d TEXT", zSep, iCol); ^ csv.c:588:31: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr,"%s\"%w\" TEXT", zSep, z); ^ csv.c:597:31: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr,"%sc%d TEXT", zSep, ++iCol); ^ csv.c:603:25: error: use of undeclared identifier 'pStr' sqlite3_str_appendf(pStr, ")"); ^ csv.c:604:18: warning: implicit declaration of function 'sqlite3_str_finish' is invalid in C99 [-Wimplicit-function-declaration] CSV_SCHEMA = sqlite3_str_finish(pStr); ^ csv.c:604:37: error: use of undeclared identifier 'pStr' CSV_SCHEMA = sqlite3_str_finish(pStr); ^ csv.c:643:27: error: use of undeclared identifier 'SQLITE_VTAB_DIRECTONLY' sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY); ^ 4 warnings and 10 errors generated. Can someone kindly explain why? Is there any other step /modification required or even change needed to be made, prior to compiling or loading an extension in general? In case there is something I missed while compiling sqlite, here is how I initially compiled it: cc -DSQLITE_SOUNDEX -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_RTREE -o sqlite3 shell.c sqlite3.c Thank you in advance. Osman ___ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users