This is a discussion on Linking error within the MySQL Database forums, part of the Database Forums category; I am trying to compile a simple ODBC and C example on Windows XP SP2. I have Cygwin_NT 5.1. ...
|
|||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
|
|||
|
I am trying to compile a simple ODBC and C example on Windows XP SP2.
I have Cygwin_NT 5.1. This is the code (obtained from http://www.easysoft.com/developer/la...dm_fns_drivers) i am attempting to compile. ODBCTest.c >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > #include <stdio.h> #include <windows.h> #include <sql.h> #include <sqlext.h> main() { SQLHENV env; char dsn[256]; char desc[256]; SQLSMALLINT dsn_ret; SQLSMALLINT desc_ret; SQLUSMALLINT direction; SQLRETURN ret; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0); direction = SQL_FETCH_FIRST; while(SQL_SUCCEEDED(ret = SQLDataSources(env, direction, dsn, sizeof(dsn), &dsn_ret, desc, sizeof(desc), &desc_ret))) { direction = SQL_FETCH_NEXT; printf("%s - %s\n", dsn, desc); if (ret == SQL_SUCCESS_WITH_INFO) printf("\tdata truncation\n"); } } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > Makefile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > CC=gcc INCPATH=-I/usr/include -Iinclude LIBS=-L. -lodbc32 LD=ld all: clean ODBCTest.exe ODBCTest.o : ODBCTest.c $(CC) $(INCPATH) $(CFLAGS) -o ODBCTest.o -c ODBCTest.c ODBCTest.exe : ODBCTest.o $(CC) $(LIBS) $(CFLAGS) -o ODBCTest.exe ODBCTest.o clean: -rm *.o -rm *.exe >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > Make output and Errors: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > $ make rm *.o rm *.exe rm: cannot remove `*.exe': No such file or directory make: [clean] Error 1 (ignored) gcc -I/usr/include -Iinclude -o ODBCTest.o -c ODBCTest.c gcc -L. -lodbc32 -o ODBCTest.exe ODBCTest.o ODBCTest.o:ODBCTest.c:(.text+0x4a): undefined reference to `_SQLAllocHandle@12' ODBCTest.o:ODBCTest.c:(.text+0x70): undefined reference to `_SQLSetEnvAttr@16' ODBCTest.o:ODBCTest.c:(.text+0xca): undefined reference to `_SQLDataSources@32' collect2: ld returned 1 exit status make: *** [ODBCTest.exe] Error 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > Things i have checked: libodbc32.a exists in c:\cygwin\lib\w32api. If i remove the above lib, i get a "lib not found" kind of error when i run make, meaning this is the lib make is using and there is no path issue. if i edit libodbc32.a in a binary editor, i can see the all the three functions mentioned in the error (_SQLAllocHandle@12, _SQLSetEnvAttr@16 and _SQLDataSources@32) exist. How can i fix these linking errors? Thanks PG |
|
|||
|
PG wrote:
> I am trying to compile a simple ODBC and C example on Windows XP SP2. > I have Cygwin_NT 5.1. > > This is the code (obtained from > http://www.easysoft.com/developer/la...dm_fns_drivers) > i am attempting to compile. > <snip> > Things i have checked: > libodbc32.a exists in c:\cygwin\lib\w32api. > If i remove the above lib, i get a "lib not found" kind of error when > i run make, meaning this is the lib make is using and there is no path > issue. > if i edit libodbc32.a in a binary editor, i can see the all the three > functions mentioned in the error (_SQLAllocHandle@12, > _SQLSetEnvAttr@16 and _SQLDataSources@32) exist. > > How can i fix these linking errors? > > Thanks > > PG > 1. Get rid of the funny graphics in your messages. 2. Try an ODBC newsgroup. libodbc32 is not a MySQL library 3. Don't even think of crossposting to every SQL-related newsgroup you can find. Such will get you no help at all. -- ================== Remove the "x" from my email address Jerry Stuckle JDS Computer Training Corp. jstucklex@attglobal.net ================== |
|
|||
|
I did not know if this was a problem with makefile, cygwin, or the
specific odbc library, hence i submitted this question to multiple groups. Anyway, after some more work, found out that the makefile is resulting in this command gcc -L/lib/w32api -lodbc32 -o ODBCTest.exe ODBCTest.o <-- Fails with link errors. When i change the command to gcc -o ODBCTest.exe ODBCTest.o /lib/w32api/libodbc32.a <-- Succeeds. Not sure of the diff between the two but it will do for now. On Mar 4, 7:24 pm, Jerry Stuckle <jstuck...@attglobal.net> wrote: > PG wrote: > > I am trying to compile a simple ODBC and C example on Windows XP SP2. > > I have Cygwin_NT 5.1. > > > This is the code (obtained from > >http://www.easysoft.com/developer/la...rial.html#dm_f...) > > i am attempting to compile. > > <snip> > > Things i have checked: > > libodbc32.a exists in c:\cygwin\lib\w32api. > > If i remove the above lib, i get a "lib not found" kind of error when > > i run make, meaning this is the lib make is using and there is no path > > issue. > > if i edit libodbc32.a in a binary editor, i can see the all the three > > functions mentioned in the error (_SQLAllocHandle@12, > > _SQLSetEnvAttr@16 and _SQLDataSources@32) exist. > > > How can i fix these linking errors? > > > Thanks > > > PG > > 1. Get rid of the funny graphics in your messages. > 2. Try an ODBC newsgroup. libodbc32 is not a MySQL library > 3. Don't even think of crossposting to every SQL-related newsgroup you > can find. Such will get you no help at all. > > -- > ================== > Remove the "x" from my email address > Jerry Stuckle > JDS Computer Training Corp. > jstuck...@attglobal.net > ================== |
|
|||
|
PG schrieb:
> I did not know if this was a problem with makefile, cygwin, or the > specific odbc library, hence i submitted this question to multiple > groups. > > Anyway, after some more work, found out that the makefile is resulting > in this command > gcc -L/lib/w32api -lodbc32 -o ODBCTest.exe ODBCTest.o <-- Fails with > link errors. But that is not what you posted earlier on, see your previously posted error output: rm: cannot remove `*.exe': No such file or directory make: [clean] Error 1 (ignored) gcc -I/usr/include -Iinclude -o ODBCTest.o -c ODBCTest.c gcc -L. -lodbc32 -o ODBCTest.exe ODBCTest.o ODBCTest.o:ODBCTest.c:(.text+0x4a): undefined reference to `_SQLAllocHandle@12' no -L/lib/w32api :-) And hey, this is has nothing to do with databases, this is a simple gcc,make problem! Cheers Hans |
|
|||
|
1. I realized this was a gcc problem so in order to debug the issue, i stopped using make. i simply started using the gcc command on command line. 2. On my machine the following two commands produced the same output (error) gcc -L. -lodbc32 -o ODBCTest.exe ODBCTest.o and gcc -L/lib/w32api -lodbc32 -o ODBCTest.exe ODBCTest.o On Mar 5, 12:56 am, Huber Hans <hans.hu...@gmail.com> wrote: > PG schrieb: > > > I did not know if this was a problem with makefile, cygwin, or the > > specific odbc library, hence i submitted this question to multiple > > groups. > > > Anyway, after some more work, found out that the makefile is resulting > > in this command > > gcc -L/lib/w32api -lodbc32 -o ODBCTest.exe ODBCTest.o <-- Fails with > > link errors. > > But that is not what you posted earlier on, see your previously posted > error output: > > rm: cannot remove `*.exe': No such file or directory > make: [clean] Error 1 (ignored) > gcc -I/usr/include -Iinclude -o ODBCTest.o -c ODBCTest.c > gcc -L. -lodbc32 -o ODBCTest.exe ODBCTest.o > ODBCTest.o:ODBCTest.c:(.text+0x4a): undefined reference to > `_SQLAllocHandle@12' > > no -L/lib/w32api :-) > > And hey, this is has nothing to do with databases, this is a simple > gcc,make problem! > > Cheers Hans |