I have the following setup
fileio.scm - contains c-lambda forms to bind C functions in fileio_util.cpp fileio_util.cpp - contains code that uses functions from gambit runtime library (data conversion functions like ___UTF_8STRING_to_SCMOBJ)
I'd like to make a loadable library from the above. Here is what I tried
bash-3.2$ uname -srmp Darwin 10.7.0 i386 i386 gsc -link -flat -o search.o1.c fileio g++ -no-cpp-precomp -Wno-unused -O1 -fno-math-errno -fschedule-insns2 -fno-trapping-math -fno-strict-aliasing -fwrapv -fomit-frame-pointer -fno-move-loop-invariants -fPIC -fno-common -mieee-fp -D___SINGLE_HOST -I"/usr/local/Gambit-C/include" -c -o "fileio_util.o" -D___DYNAMIC fileio_util.cpp g++ -no-cpp-precomp -Wno-unused -O1 -fno-math-errno -fschedule-insns2 -fno-trapping-math -fno-strict-aliasing -fwrapv -fomit-frame-pointer -fno-move-loop-invariants -fPIC -fno-common -mieee-fp -D___SINGLE_HOST -I"/usr/local/Gambit-C/include" -c -o "search.o1.o" -D___DYNAMIC search.o1.c g++ -no-cpp-precomp -Wno-unused -O1 -fno-math-errno -fschedule-insns2 -fno-trapping-math -fno-strict-aliasing -fwrapv -fomit-frame-pointer -fno-move-loop-invariants -fPIC -fno-common -mieee-fp -D___SINGLE_HOST -I"/usr/local/Gambit-C/include" -c -o "fileio.o" -D___DYNAMIC fileio.c g++ -bundle fileio_util.o fileio.o sqlite3.o search.o1.o -o search.o1
Linker gives the following errors
Undefined symbols: "___S64_to_SCMOBJ(long, long*, int)", referenced from: ConvertSqliteData(sqlite3_stmt*, int, int, long&)in fileio_util.o "___UTF_8STRING_to_SCMOBJ(char*, long*, int)", referenced from: ConvertSqliteData(sqlite3_stmt*, int, int, long&)in fileio_util.o w_sqlite_prepare(sqlite3*, char*)in fileio_util.o "___F64_to_SCMOBJ(double, long*, int)", referenced from: ConvertSqliteData(sqlite3_stmt*, int, int, long&)in fileio_util.o
Since libgambc.a defines those symbols I tried liking with it. Here is what I get.
Undefined symbols: "_environ", referenced from: ___unsetenv_UCS_2(unsigned short*)in libgambc.a(os_shell.o) ___cleanup_shell_module() in libgambc.a(os_shell.o) ___os_environ() in libgambc.a(os_shell.o) ___setenv_UCS_2(unsigned short*, unsigned short*)in libgambc.a(os_shell.o) ___setenv_UCS_2(unsigned short*, unsigned short*)in libgambc.a(os_shell.o) ___getenv_UCS_2(unsigned short*, unsigned short**)in libgambc.a(os_shell.o) ___device_stream_setup_from_process(___device_stream_struct**, ___device_group_struct*, char**, char**, char*, int)in libgambc.a(os_io.o) (maybe you meant: ____G__23__23_fail_2d_check_2d_unbound_2d_os_2d_environment_2d_variable_2d_exception, ____G__23__23_display_2d_dynamic_2d_environment_3f_ , ... )
Also at first tried using gsc to run the compiler for me
gsc -verbose -cc-options "-D___DYNAMIC" -obj fileio.c fileio_util.cpp search.o1.c
But I kept getting
*** ERROR IN "fileio_util.cpp"@1.1 -- Invalid token
I realized it was treating the .cpp file as a scheme file and failing. Is this a bug or am I using it incorrectly? How do I compile the above as a loadable library?
Thank you for Gambit. The more I use it the more I like it.