![]() |
|
|
|
|
1
19th November 10:19
External User
Posts: 1
|
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. 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 -- comp.lang.c.moderated - moderation address: clcm@plethora.net -- you must have an appropriate newsgroups line in your header for your mail to be seen, or the newsgroup name in square brackets in the subject line. Sorry. |
|
|
|
|
2
19th November 10:19
External User
Posts: 1
|
Why cross-post this to three groups where it is off topic? Try one of
the many windows programming groups. -- Ian Collins. -- comp.lang.c.moderated - moderation address: clcm@plethora.net -- you must have an appropriate newsgroups line in your header for your mail to be seen, or the newsgroup name in square brackets in the subject line. Sorry. |
|
|
3
24th November 00:13
External User
Posts: 1
|
Since you are not using C why cross-post to a C++ group?
ODBC is not topical here since it is not standard C. There are, however, mailing lists for unixODBC, see the unixODBC web site for details. For the MS implementation there are plenty of Microsoft groups. <snip> How to drive your tools to link to non-standard libraries is also not topical here. However, there are Cygwin mailing lists. However I suggest you try specifying the libraries you need after the object files that reference them. -- Flash Gordon -- comp.lang.c.moderated - moderation address: clcm@plethora.net -- you must have an appropriate newsgroups line in your header for your mail to be seen, or the newsgroup name in square brackets in the subject line. Sorry. |
|
|
4
24th November 00:13
External User
Posts: 1
|
You will probably have beeter asking on the site you got the code from
or a newsgroup where ODBC and/or Windows is topical. Remove del for email -- comp.lang.c.moderated - moderation address: clcm@plethora.net -- you must have an appropriate newsgroups line in your header for your mail to be seen, or the newsgroup name in square brackets in the subject line. Sorry. |
|
|
5
24th November 00:15
External User
Posts: 1
|
Note that questions about ODBC, cygwin, XP, etc. really aren't topical
here (your question isn't about the C language as such, which is what this group focuses on). In the future, you should direct such questions to newsgroups devoted to embedded SQL or ODBC programming. However, I think I know the answer to your problem. [snip] I suspect you need to add the path to the libodbc32.a library to your LIBS variable, like so: -L/cygdrive/c/lib/w32api Give that a shot, let me know if it works. -- comp.lang.c.moderated - moderation address: clcm@plethora.net -- you must have an appropriate newsgroups line in your header for your mail to be seen, or the newsgroup name in square brackets in the subject line. Sorry. |
|
|
6
24th November 00:15
External User
Posts: 1
|
Note that questions about ODBC on Windows using Cygwin are not topical
for this newsgroup; our focus is on the C language itself, not applications using C. However, I think I know what your problem is: [snip] You need to specify the path to the libodbc32.a library, otherwise it will only look in the standard library path. Add the following to your LIBS variable: -L/cygdrive/c/cygwin/lib/w32api I think that's the right path, anyway. -- comp.lang.c.moderated - moderation address: clcm@plethora.net -- you must have an appropriate newsgroups line in your header for your mail to be seen, or the newsgroup name in square brackets in the subject line. Sorry. |
|