This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Help! Problems linking against Win32 API...



I'm struggling trying to figure out how to link an application that
makes calls to the Win32 API, specifically, ODBC.  In the FAQ, it
implies that I should just be able to compile and link my application
with no "glue".  The following is extracted from the Programming
Questions section of the FAQ:

    For example, to use graphics functions (GDI) you must link with
    gdi32 like this:  

    gcc -o foo.exe foo.o bar.o -lgdi32 

    or (compiling and linking in one step): 

    gcc -o foo.exe foo.c bar.c -lgdi32 

However, when I link I get all sorts of undefined symbol errors:

    g++  -o odbc_test odbc_test.o \
	    -L../gen_code/obj -lgen_code \
	    -L../../dom_util/obj -ldom_util \
	    -L../../db_findr/obj -ldb_findr \
	    -L../../findr_util/obj -lfindr_util \
	    -L../../../../util/obj -lutil \
	    -lodbc32 \
	    -L//c/Cygnus/B19/H-i386-cygwin32/lib -lstdc++
    ../../db_findr/obj/libdb_findr.a(odbc.o): In function `_4odbcPcP5query':
    //h/.../obj/../src/odbc.cxx:9: undefined reference to `SQLAllocEnv'
    //h/.../obj/../src/odbc.cxx:10: undefined reference to `SQLAllocConnect'
    //h/.../obj/../src/odbc.cxx:11: undefined reference to `SQLConnect'
    ...

When I examine the symbol table of the object file that makes the ODBC
calls, I see:

    U _SQLAllocConnect
    U _SQLAllocEnv
    U _SQLAllocStmt
    U _SQLColumns
    U _SQLConnect
    U _SQLDisconnect
    U _SQLFetch
    U _SQLFreeConnect
    U _SQLFreeEnv
    U _SQLFreeStmt
    U _SQLGetData
    U _SQLSetConnectOption
    U _SQLTables

On the other hand, when I examine the libodbc32.a file that comes with
the GNU-WIN32 package I see:

    00000000 T _SQLTransact@12
    00000000 T _SQLTables@36
    00000000 T _SQLTablePrivileges@28
    00000000 T _SQLStatistics@36
    00000000 T _SQLSpecialColumns@40
    00000000 T _SQLSetStmtOption@12
    ...

There is obviously a mismatch between the symbols the compiler
generates and those available at link time.  How do I bridge this gap?
It seems that somewhere there must be another jump table of some sort
that maps (for example) "_SQLTables" to "_SQLTables@36".

(If the answer requires using non-GNU tools, go easy on me.  I'm
fairly unfamiliar with the Windows environment.)

Thanks,

-- 
Skip Montanaro
(montanaro@crd.ge.com, 518 387 6792)
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]