discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GNUstep and SQLite3


From: Andreas Höschler
Subject: GNUstep and SQLite3
Date: Tue, 5 Jun 2018 15:48:21 +0200

Hi all,

I would like to access a SQLite database with a minimalistic Objective-C (GNUstep) program. I installed SQLite like so

tar xvf sqlite-autoconf-3230100.tar
cd sqlite-autoconf-3230100
./configure
make
make install

and got

/usr/local/bin/sqlite3

/usr/include/php/ext/sqlite3/libsqlite
/usr/lib/libsqlite3.0.dylib
/usr/lib/libsqlite3.dylib
/usr/local/lib/libsqlite3.0.dylib
/usr/local/lib/libsqlite3.a
/usr/local/lib/libsqlite3.dylib
/usr/local/lib/libsqlite3.la

I have now written the following Objective-C test program but don't get it linked! :-(

***************************************************************************************************
#import <Foundation/Foundation.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
  {
   int i;
   for(i=0; i<argc; i++)
     {
      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
     }
   printf("\n");
   return 0;
  }
 
int main (int argc, const char *argv[])
  {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   
   // insert your code here
     {
      sqlite3 *db;
      int rc;
      
      rc = sqlite3_open("/Users/ahoesch/Development/SQLite/sqlite-autoconf-3230100/ex1", &db);
      if (rc) 
        {
         NSLog(@"Can't open database: %s\n", sqlite3_errmsg(db));
         sqlite3_close(db);
         return(1);
        }
      
      char *zErrMsg = 0;
      rc = sqlite3_exec(db, "select * from PERSON;", callback, 0, &zErrMsg);
        if (rc != SQLITE_OK)
          {
           fprintf(stderr, "SQL error: %s\n", zErrMsg);
           sqlite3_free(zErrMsg);           
          }
        sqlite3_close(db);
     }
   
   [pool release];
   exit(0);       // insure the process exit status is 0
   return 0;      // ...and make main fit the ANSI spec.
}
***************************************************************************************************
With the GNumakefile

Attachment: GNUmakefile
Description: Binary data


I get 

admins-iMac:FirstAccess ahoesch$ make clean
This is gnustep-make 2.4.0. Type 'make print-gnustep-make-help' for help.
rm -rf /Build/FirstAccess/*~ /Build/FirstAccess/obj
admins-iMac:FirstAccess ahoesch$ make
This is gnustep-make 2.4.0. Type 'make print-gnustep-make-help' for help.
Making all for tool FirstAccess...
 Compiling file main.m ...
 Linking tool FirstAccess ...
Undefined symbols for architecture i386:
  "_sqlite3_close", referenced from:
      _main in main.m.o
  "_sqlite3_errmsg", referenced from:
      _main in main.m.o
  "_sqlite3_exec", referenced from:
      _main in main.m.o
  "_sqlite3_free", referenced from:
      _main in main.m.o
  "_sqlite3_open", referenced from:
      _main in main.m.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [/Build/FirstAccess/obj/FirstAccess] Error 1
make[2]: *** [internal-tool-all_] Error 2
make[1]: *** [FirstAccess.all.tool.variables] Error 2
make: *** [internal-all] Error 2

That's probably because sqlite lib was built for for x86_64 and cannot be mixed with 32 bit code!? I extracted the gcc calls with make messages=yes and remove all -m32 occurrences. This now gives me


admins-iMac:FirstAccess ahoesch$ cd /Build/FirstAccess; /Library/GNUstep/Makefiles/mkinstalldirs ./obj
admins-iMac:FirstAccess ahoesch$ cd /Build/FirstAccess; /Library/GNUstep/Makefiles/mkinstalldirs ./obj/FirstAccess.obj/
admins-iMac:FirstAccess ahoesch$ cd /Users/ahoesch/Development/SQLite/FirstAccess
admins-iMac:FirstAccess ahoesch$ gcc main.m -c -MMD -MP -DNeXT_Foundation_LIBRARY=1 -DNeXT_GUI_LIBRARY=1 -DNeXT_RUNTIME=1 -dynamic -fno-common -Wall -DGSWARN -DGSDIAGNOSE -Wno-import -g -O2 -fno-strict-aliasing -fnext-runtime -Wno-parentheses -Wno-import -I. -I/usr/local/include/ -F/Library/Frameworks/ -o /Build/FirstAccess/obj/FirstAccess.obj/main.m.o
admins-iMac:FirstAccess ahoesch$ gcc -fnext-runtime -o /Build/FirstAccess/obj/FirstAccess /Build/FirstAccess/obj/FirstAccess.obj/main.m.o -ldl -lpthread -lz -lm   -L/usr/local/lib/ -F/Library/Frameworks/    -framework Foundation       -lm
Undefined symbols for architecture x86_64:
  "_sqlite3_close", referenced from:
      _main in main.m.o
  "_sqlite3_errmsg", referenced from:
      _main in main.m.o
  "_sqlite3_exec", referenced from:
      _main in main.m.o
  "_sqlite3_free", referenced from:
      _main in main.m.o
  "_sqlite3_open", referenced from:
      _main in main.m.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I am stuck! Any idea whatI am doing wrong and how to get this working?

Thanks a lot,

 Andreas



reply via email to

[Prev in Thread] Current Thread [Next in Thread]