I tried initializing buflen, and using SQLConnect(). Still get
seg fault.
For grins, I tried installing the 9.5 driver, but it couldn't
talk to the 8.5 server. I didn't think it would work, but it was
worth a try.
Maybe I'll try writing C wrapper functions and call them from
the C++ program.
On 2007-03-13 11:13, Bill Bach wrote:
> Not sure if it is the same thing or not, but this sounds awfully
> similar:
> http://bugs.mysql.com/bug.php?id=15248
>
> Other random suggestions (with no basis whatsoever):
> 1) buflen is not initialized. Definition I found was "Pointer to the
> total number of bytes (excluding the null termination byte) available
> to return in szConnStrOut." Not sure if it should be initialized to
> 256 or not.
> 2) Have you tried the more simplistic SQLConnect? Or do you need more
> flexibility in your "real" code?
> BtrieveBill
>
> John C. Frickson wrote:
>
>> I'm migrating some of our applications from Windows to our
>> Linux servers. The programs are in C++. They always get a
>> segmentation fault in SQLDriverConnect(). I've created a very
>> simple program in both C and C++ that exhibits the problem.
>> Save as both prg_c.c and prg_cpp.cpp and compiled with:
>> gcc -m32 -lodbc -o prg_c prg_c.c
>> g++ -m32 -lodbc -o prg_cpp prg_cpp.c
>> (-m32 because the server is running 64-bit Linux and PSQL
>> only comes with 32-bit drivers.)
>>
>> -----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----
>> #include <string.h>
>> #include <sql.h>
>> #include <sqlext.h>
>>
>> int main(int argc, char **argv)
>> {
>> SQLHENV henv;
>> SQLHDBC hdbc;
>> SQLCHAR dsn[120];
>> short buflen;
>> char buffer[257];
>> int status;
>>
>> strcpy((char*)dsn, "DSN=Paragon");
>> if (SQLAllocEnv (&henv) != SQL_SUCCESS)
>> return -1;
>> if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS)
>> return -1;
>> status = SQLDriverConnect (hdbc, 0, dsn, SQL_NTS,
>> (SQLCHAR*)buffer, sizeof (buffer), &buflen,
>> SQL_DRIVER_COMPLETE);
>> if (status != SQL_SUCCESS && status != SQL_SUCCESS_WITH_INFO)
>> return -1;
>> SQLDisconnect (hdbc);
>> SQLFreeConnect (hdbc);
>> SQLFreeEnv (henv);
>>
>> return 0;
>> }
>> -----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----
>>
>> The straight C program runs fine. The C++ program blows in
>> the SQLDriverConnect() call.
>>
>> I've tried both -lodbc and -liodbc and both fail at the same
>> place.
>>
>> John
>


|