Get Database Layer to Work Topic is solved
Get Database Layer to Work
I'm new to wxWidgets and Database Layer. As a hobby program I want to write a program that allows the end-user to choose either SQLite3 or MySQL as the database engine. It looks like "Database Layer" is just the ticket - but I seem to be missing something (knowledge).
I tried the make -f GNUmakefile sqlite (and mysql) and the response was "nothing to be done for 'sqlite' (and 'mysql'). I edited GNUmakefile to add paths for Sqlite and mysql (/usr/include and /usr/lib). I verified that the mysql.h and sqlite.h files exist.
I assume I need to Make Database Layer to get the header and library files "databaselayer_mysql.a" and "databaselayer_sqlite.a". I have mysql and sqlite libraries in /usr/lib; but no "databaselayer" library files - so why does the Make say there is "nothing to do"?
I am using Ubuntu 8.04 Linux. I installed Code::Blocks SVN 5456 which comes with wxWidgets wx2.8.8 (Linux, unicode). MySQL and SQLite3 are working.
I have built a test program using mysql in code::blocks using the mysql++ wrapper, so I know the mysql header and library are good - not played with Sqlite other than the command line.
Any ideas?
I tried the make -f GNUmakefile sqlite (and mysql) and the response was "nothing to be done for 'sqlite' (and 'mysql'). I edited GNUmakefile to add paths for Sqlite and mysql (/usr/include and /usr/lib). I verified that the mysql.h and sqlite.h files exist.
I assume I need to Make Database Layer to get the header and library files "databaselayer_mysql.a" and "databaselayer_sqlite.a". I have mysql and sqlite libraries in /usr/lib; but no "databaselayer" library files - so why does the Make say there is "nothing to do"?
I am using Ubuntu 8.04 Linux. I installed Code::Blocks SVN 5456 which comes with wxWidgets wx2.8.8 (Linux, unicode). MySQL and SQLite3 are working.
I have built a test program using mysql in code::blocks using the mysql++ wrapper, so I know the mysql header and library are good - not played with Sqlite other than the command line.
Any ideas?
The issue may be that your copy of the DatabaseLayer GNUmakefile was only written for static builds of wxWidgets. The version of GNUmakefile at
http://wxcode.svn.sourceforge.net/viewv ... vision=784
may fix the problem.
http://wxcode.svn.sourceforge.net/viewv ... vision=784
may fix the problem.
Making headway
That GNUmakefile was an improvement. I ran it (unmodified) for mysql and it did a bunch of compiles, etc. but I don't think it completed satisfactorily. I ran it as because the first time I tried it gave a fatal error due to permission denied:
But it did not write any "databaselayer - " lib file(s) to /usr/lib. I noticed a number of WARNINGS related to type-punned pointer is that significant?
The end of the terminal session is:
Can you tell me what I need to do? Should I have made configuration changes to GNUmakefile?
I am surprised that it is accessing DLL files - I thought that was a Microsoft thing, not a Linux file format.
I ran the make for sqlite which resulted in the following, this time I remembered to redirect the log to a file:
Code: Select all
sudo make GNUmakefile mysql
The end of the terminal session is:
Code: Select all
/usr/include/wx-2.8/wx/gdicmn.h: In member function ‘wxStringToColourHashMap_wxImplementation_HashTable::Node** wxStringToColourHashMap_wxImplementation_HashTable::GetNodePtr(const wxString&) const’:
/usr/include/wx-2.8/wx/gdicmn.h:544: warning: dereferencing type-punned pointer will break strict-aliasing rules
In file included from /usr/include/wx-2.8/wx/wx.h:45,
from ../src/../include/MysqlResultSetMetaData.h:12,
from ../src/MysqlResultSetMetaData.cpp:1:
/usr/include/wx-2.8/wx/image.h: In member function ‘wxImageHistogramBase_wxImplementation_HashTable::Node** wxImageHistogramBase_wxImplementation_HashTable::GetNodePtr(const long unsigned int&) const’:
/usr/include/wx-2.8/wx/image.h:136: warning: dereferencing type-punned pointer will break strict-aliasing rules
g++ -shared -fPIC -o ../lib/gcc_dll/libwxcode_gtk2_databaselayer_mysql-2.8.so gccgtk2_dll/databaselayer_mysql_dll_DatabaseLayer.o gccgtk2_dll/databaselayer_mysql_dll_DatabaseResultSet.o gccgtk2_dll/databaselayer_mysql_dll_PreparedStatement.o gccgtk2_dll/databaselayer_mysql_dll_DatabaseErrorReporter.o gccgtk2_dll/databaselayer_mysql_dll_DatabaseStringConverter.o gccgtk2_dll/databaselayer_mysql_dll_DatabaseQueryParser.o gccgtk2_dll/databaselayer_mysql_dll_MysqlDatabaseLayer.o gccgtk2_dll/databaselayer_mysql_dll_MysqlParameter.o gccgtk2_dll/databaselayer_mysql_dll_MysqlPreparedStatement.o gccgtk2_dll/databaselayer_mysql_dll_MysqlPreparedStatementParameter.o gccgtk2_dll/databaselayer_mysql_dll_MysqlPreparedStatementParameterCollection.o gccgtk2_dll/databaselayer_mysql_dll_MysqlPreparedStatementResultSet.o gccgtk2_dll/databaselayer_mysql_dll_MysqlPreparedStatementWrapper.o gccgtk2_dll/databaselayer_mysql_dll_MysqlResultSetMetaData.o -L../lib -L./lib `mysql_config --libs` -lmysqld `wx-config --debug=no --unicode=yes --static=no --toolkit=gtk2 --version=2.8 --libs base`
I am surprised that it is accessing DLL files - I thought that was a Microsoft thing, not a Linux file format.
I ran the make for sqlite which resulted in the following, this time I remembered to redirect the log to a file:
Code: Select all
g++ -shared -fPIC -o ../lib/gcc_dll/libwxcode_gtk2_databaselayer_sqlite-2.8.so gccgtk2_dll/databaselayer_sqlite_dll_SqliteDatabaseLayer.o gccgtk2_dll/databaselayer_sqlite_dll_SqlitePreparedStatement.o gccgtk2_dll/databaselayer_sqlite_dll_SqliteResultSet.o gccgtk2_dll/databaselayer_sqlite_dll_SqliteResultSetMetaData.o gccgtk2_dll/databaselayer_sqlite_dll_DatabaseLayer.o gccgtk2_dll/databaselayer_sqlite_dll_DatabaseResultSet.o gccgtk2_dll/databaselayer_sqlite_dll_PreparedStatement.o gccgtk2_dll/databaselayer_sqlite_dll_DatabaseErrorReporter.o gccgtk2_dll/databaselayer_sqlite_dll_DatabaseStringConverter.o gccgtk2_dll/databaselayer_sqlite_dll_DatabaseQueryParser.o -L./lib -L../lib -lsqlite3 `wx-config --debug=no --unicode=yes --static=no --toolkit=gtk2 --version=2.8 --libs base`
The build should create the intermediate files in databaselayer/build/gccgtk2_dll and the output files in databaselayer/lib/gcc_dll (or something similar under the databaselayer/lib directory). Was a file ending in ".so" or ".a" created anywhere under the databaselayer/lib directory?
I think the "_dll_" naming convention is part of the wxCode Bakefile defaults. It uses "_lib_" when creating a static library and "_dll_" when creating a shared library. On Linux, the shared output file will still have ".so" extension rather than ".dll" (as far as I know).
From the output you provided, it looks like the shared library libwxcode_gtk2_databaselayer_sqlite-2.8.so was successfully created in the "databaselayer/lib/gcc_dll" directory. You should be able to link your application code to that library file.
I think the "_dll_" naming convention is part of the wxCode Bakefile defaults. It uses "_lib_" when creating a static library and "_dll_" when creating a shared library. On Linux, the shared output file will still have ".so" extension rather than ".dll" (as far as I know).
From the output you provided, it looks like the shared library libwxcode_gtk2_databaselayer_sqlite-2.8.so was successfully created in the "databaselayer/lib/gcc_dll" directory. You should be able to link your application code to that library file.
Fixed
You are correct - I was expecting the files to appear in /usr/lib; but they are where you said they would be.
The files are:
Am I correct assuming the "2.8" refers to the version of wxWidgets and not mysql or sqlite?
I probably wont get a chance to try linking to them until the weekend. I will report then if I have further problems.
THANK YOU!
The files are:
Code: Select all
libwxcode_gtk2_databaselayer_mysql-2.8.so
libwxcode_gtk2_databaselayer_sqlite-2.8.so
I probably wont get a chance to try linking to them until the weekend. I will report then if I have further problems.
THANK YOU!
Re: Fixed
Generally you need to do a make install or sudo make install to get the files to appear in /usr/lib, the other targets like GNUmakefile and mysql will only build those components not install them.wagb278 wrote:You are correct - I was expecting the files to appear in /usr/lib; but they are where you said they would be.
Just a general Make rule. I've never built this component so I might be wrong in regards to it.
-Max
Lib and Header File Locations
This might be a little bit off topic, and dumb.
Where on Linux (Ubuntu) should I place the databaselayer library files and header files? What is the norm?
I downloaded and built the databaselayer in:
/usr/share/doc/databaselayer - Maybe that was a mistake.
Can I safely copy (or should I create a symbolic link) the databaselayer include files to:
/usr/include/wx-2-8/wx/databaselayer
- and a similar location for the library files under /usr/lib?
Inspecting /usr/lib/wx, I see only "config" and "include" subdirectories with lib files for "base" and "gtk2". Do those libs include all the wxWidgets basic (non-third-party) functionality needed for the link operation?
I tried the make install, but that did not move/copy my databaselayer library files for mysql and sqlite.
Any suggestions - recommendations?
Thanks
Where on Linux (Ubuntu) should I place the databaselayer library files and header files? What is the norm?
I downloaded and built the databaselayer in:
/usr/share/doc/databaselayer - Maybe that was a mistake.
Can I safely copy (or should I create a symbolic link) the databaselayer include files to:
/usr/include/wx-2-8/wx/databaselayer
- and a similar location for the library files under /usr/lib?
Inspecting /usr/lib/wx, I see only "config" and "include" subdirectories with lib files for "base" and "gtk2". Do those libs include all the wxWidgets basic (non-third-party) functionality needed for the link operation?
I tried the make install, but that did not move/copy my databaselayer library files for mysql and sqlite.
Any suggestions - recommendations?
Thanks
I don't know if there is a wxCode standard that DatabaseLayer should be following, but I'll refer to the Readme.txt file of wxSQLite3 (http://wxcode.svn.sourceforge.net/viewv ... Readme.txt) which says:
So I guess "/usr/local/" might be an acceptable choice of where to put these files.
Code: Select all
The autoconf-based systems also support a "make install" target which
builds the library and then copies the headers of the component to
/usr/local/include and the lib to /usr/local/lib.