| 1 | Introduction |
|---|
| 2 | |
|---|
| 3 | Welcome to libpqxx, the C++ API to the PostgreSQL database management system. |
|---|
| 4 | |
|---|
| 5 | This package requires PostgreSQL to be installed--including the C headers for |
|---|
| 6 | client development. The library builds on top of PostgreSQL's standard C API, |
|---|
| 7 | libpq, though this fact is almost completely hidden from programs that use |
|---|
| 8 | libpqxx. |
|---|
| 9 | |
|---|
| 10 | Further information, as well as updates, a mailing list, and a bug reporting |
|---|
| 11 | system can be found at http://pqxx.org/ |
|---|
| 12 | |
|---|
| 13 | There are also ready-made libpqxx packages available for several systems: Debian |
|---|
| 14 | packages are available on any Debian download mirror, Mark Round maintains a |
|---|
| 15 | Blastwave package for Solaris, and Arjen Baart has made RPM packages (source and |
|---|
| 16 | i386 binaries) available on |
|---|
| 17 | |
|---|
| 18 | http://www.andromeda.nl/UNIX/packages/ |
|---|
| 19 | |
|---|
| 20 | You may want to check these before going to the trouble of building libpqxx |
|---|
| 21 | yourself. |
|---|
| 22 | |
|---|
| 23 | |
|---|
| 24 | Getting Started |
|---|
| 25 | |
|---|
| 26 | All of this applies only to operating systems that are either part of, or |
|---|
| 27 | closely resemble, or support the standard interfaces of, the Unix family. This |
|---|
| 28 | includes not just the "real" Unices (AIX, HP-UX, Irix, Solaris) but also MacOS X |
|---|
| 29 | (starting with 10.2, a.k.a. Jaguar) as well as GNU/Linux, the various BSD |
|---|
| 30 | operating systems, and Microsoft Windows with a Unix-like environment such as |
|---|
| 31 | Cygwin or MinGW installed. There is a separate section below for Windows users |
|---|
| 32 | without such an environment. |
|---|
| 33 | |
|---|
| 34 | For the Unix-like systems the procedure is essentially the standard "configure, |
|---|
| 35 | make, make install" sequence, except that in most cases some extra work needs to |
|---|
| 36 | be done for the optional "make check" step. |
|---|
| 37 | |
|---|
| 38 | Let's just step through the full procedure for a Unix-like system. You may be |
|---|
| 39 | familiar with most of it: |
|---|
| 40 | |
|---|
| 41 | |
|---|
| 42 | ./configure # (plus suitable preparation, to set up the build environment) |
|---|
| 43 | make # (to build the library) |
|---|
| 44 | |
|---|
| 45 | # Run library's self-test suite; in this example, connect to DBMS running on |
|---|
| 46 | # local Unix socket in /tmp, and use database pqxx as a testing ground. See |
|---|
| 47 | # below for more details on how to set test parameters. |
|---|
| 48 | |
|---|
| 49 | make PGHOST=/tmp PGDATABASE=pqxx check |
|---|
| 50 | make install # (with superuser privileges, to install the library; see below) |
|---|
| 51 | |
|---|
| 52 | |
|---|
| 53 | Once this has succeeded, you should be able to link your own programs with |
|---|
| 54 | libpqxx and run them with confidence. |
|---|
| 55 | |
|---|
| 56 | If it hasn't succeeded, or isn't quite what you want, it's time to move on to |
|---|
| 57 | the fineprint we hinted at. |
|---|
| 58 | |
|---|
| 59 | |
|---|
| 60 | 1. Configure |
|---|
| 61 | |
|---|
| 62 | A word on that "suitable preparation." In older versions of libpqxx, you would |
|---|
| 63 | need to specify the location of the PostgreSQL header and library files in some |
|---|
| 64 | cases; when left alone, the script had a builtin list of usual locations to |
|---|
| 65 | check. This is no longer necessary; the configure script will use another |
|---|
| 66 | script provided by Postgres to find them automatically. |
|---|
| 67 | |
|---|
| 68 | In the new setup, however, the configure script must be able to find and run |
|---|
| 69 | this new script. It's called pg_config, and it should be in the bin/ |
|---|
| 70 | subdirectory of wherever Postgres is installed on your system. Make sure this |
|---|
| 71 | directory is represented in your executable path before you run the configure |
|---|
| 72 | script, or it will fail with a message like: |
|---|
| 73 | |
|---|
| 74 | configure: error: PostgreSQL configuration script pg_config was not found. |
|---|
| 75 | |
|---|
| 76 | Or if you don't want to have pg_config in your path for whatever reason, or you |
|---|
| 77 | have multiple PostgreSQL installations on your system (each with their own copy |
|---|
| 78 | of pg_config, naturally) and wish to override the default version, add an option |
|---|
| 79 | like |
|---|
| 80 | |
|---|
| 81 | PG_CONFIG=/home/me/postgres/bin/pg_config |
|---|
| 82 | |
|---|
| 83 | to your "configure" command line, where /home/me/postgres/bin/pg_config is an |
|---|
| 84 | example of where your preferred copy of pg_config might be. This would indicate |
|---|
| 85 | to the configure script that you wish to build a libpqxx based on the postgres |
|---|
| 86 | version found in /home/me/postgres. |
|---|
| 87 | |
|---|
| 88 | Finally, if you wish to install the libpqxx you're going to build in a custom |
|---|
| 89 | location, such as your home directory /home/me, you can specify this to the |
|---|
| 90 | configure script by calling it with the --prefix option, e.g.: |
|---|
| 91 | |
|---|
| 92 | ./configure --prefix=/home/me |
|---|
| 93 | |
|---|
| 94 | This can be handy if you don't have administrator rights on the machine you're |
|---|
| 95 | working on! |
|---|
| 96 | |
|---|
| 97 | The configure scripts supports many other options to tweak how and where libpqxx |
|---|
| 98 | is to be built and installed; try the --help option to get an overview if you're |
|---|
| 99 | interested. |
|---|
| 100 | |
|---|
| 101 | If configuration just absolutely plain won't work for whatever reason: take a |
|---|
| 102 | look in the config/sample-headers/ directory. Here you will find configuration |
|---|
| 103 | headers for various compilers and libpq versions. Pick the config-internal-*.h |
|---|
| 104 | and config-public-*.h headers for the compiler and libpq version most closely |
|---|
| 105 | matching your own, and see if they work for you. |
|---|
| 106 | |
|---|
| 107 | |
|---|
| 108 | 2. Make |
|---|
| 109 | |
|---|
| 110 | One problem some people have run into at this stage is that the header files for |
|---|
| 111 | PostgreSQL need the OpenSSL header files to work. If this happens to you, make |
|---|
| 112 | sure openssl is installed and try again. |
|---|
| 113 | |
|---|
| 114 | Otherwise, if the "make" part of the build procedure fails, you're probably |
|---|
| 115 | using a different compiler or compiler version than I am. If your C++ compiler |
|---|
| 116 | is more than a few years old, and it's not one of the highly standard-compliant |
|---|
| 117 | ones like gcc or Comeau, just forget it. It won't work until you get an |
|---|
| 118 | up-to-date compiler. |
|---|
| 119 | |
|---|
| 120 | If, on the other hand, you're using a shiny new compiler and you're getting |
|---|
| 121 | errors or warnings, please let me know about them so I can fix them. |
|---|
| 122 | |
|---|
| 123 | |
|---|
| 124 | 3. Make Check |
|---|
| 125 | |
|---|
| 126 | This part is optional. It is recommended that you do this just to make sure |
|---|
| 127 | that you've got a working library, but there is one Very Important Caveat that |
|---|
| 128 | could affect your existing data. See below. |
|---|
| 129 | |
|---|
| 130 | "Make check" is where you compile and run the regression test that typically |
|---|
| 131 | exercises all public methods in the library. Obviously something or other will |
|---|
| 132 | have to go wrong at this point, right? |
|---|
| 133 | |
|---|
| 134 | Indeed. The "make check" procedure needs a database to play with. In this |
|---|
| 135 | database, it will create two tables "pqxxevents" and "pqxxorgevents," as well as |
|---|
| 136 | some tables for its own use. All have names prefixed with pqxx. CAUTION: if |
|---|
| 137 | this database already contains tables with any of these names, either the check |
|---|
| 138 | will fail, or worse, your original data will be erased. |
|---|
| 139 | |
|---|
| 140 | So choose your test database with at least a little caution. Obviously the |
|---|
| 141 | safest thing to do is to set up a separate database for this. |
|---|
| 142 | |
|---|
| 143 | To direct the regression test to the right database, set some or all of the |
|---|
| 144 | following environment variables as needed before running "make check" (see |
|---|
| 145 | description above): |
|---|
| 146 | |
|---|
| 147 | PGDATABASE (name of database; defaults to your user name) |
|---|
| 148 | PGHOST (database server; defaults to local machine) |
|---|
| 149 | PGPORT (PostgreSQL port to connect to; default is 5432) |
|---|
| 150 | PGUSER (your PostgreSQL user ID; defaults to your login name) |
|---|
| 151 | PGPASSWORD (your PostgreSQL password, if needed) |
|---|
| 152 | |
|---|
| 153 | Further environment variables that may be of use to you are documented in the |
|---|
| 154 | libpq documentation and in the manpage for Postgres' command-line client, psql. |
|---|
| 155 | |
|---|
| 156 | Setting environment variables works differently depending on your shell, but |
|---|
| 157 | try (preferably in this order): |
|---|
| 158 | export VARIABLE=value |
|---|
| 159 | or |
|---|
| 160 | VARIABLE=value |
|---|
| 161 | export VARIABLE |
|---|
| 162 | or |
|---|
| 163 | set VARIABLE=value |
|---|
| 164 | |
|---|
| 165 | Try printing the variable afterwards to make sure. The command is normally |
|---|
| 166 | echo $VARIABLE |
|---|
| 167 | and, if you set the variable successfully, should print the value you assigned. |
|---|
| 168 | It will print nothing if you failed to set the variable. |
|---|
| 169 | |
|---|
| 170 | Should you have trouble finding the socket for a database running locally on a |
|---|
| 171 | Unix socket, try locating the socket in the filesystem. It should appear as a |
|---|
| 172 | "file" called .s.PGSQL.5432 (if you are new to Unix-like systems, be warned that |
|---|
| 173 | files whose name start with a dot are not displayed by default). Set PGHOST to |
|---|
| 174 | the directory where this "file" resides, as an absolute path--e.g. "/tmp". On |
|---|
| 175 | most Unix-like systems, it will be located in /tmp, /var/run, or if your system |
|---|
| 176 | adheres to the FHS (the Filesystem Hierarchy Standard for GNU/Linux systems), in |
|---|
| 177 | /var/run/postgresql. Be sure to use the absolute path; the leading slash tells |
|---|
| 178 | libpq that this is not a network address but a local Unix socket. |
|---|
| 179 | |
|---|
| 180 | If you've taken care of all this, it should get you through the regression test |
|---|
| 181 | to ensure that everything's working properly. If it isn't, and it's not |
|---|
| 182 | something you can fix by tweaking your PostgreSQL setup, let me know about it |
|---|
| 183 | and I'll try to fix it. |
|---|
| 184 | |
|---|
| 185 | |
|---|
| 186 | 4. Make Install |
|---|
| 187 | |
|---|
| 188 | This is supposed to install the libpqxx library and header files to your |
|---|
| 189 | system. It took me and many others some time to get this to actually work, so |
|---|
| 190 | please take care to check that it really does work and that especially the |
|---|
| 191 | headers are really installed to your system. |
|---|
| 192 | |
|---|
| 193 | The library and headers are installed to /usr/local/ by default, in their |
|---|
| 194 | respective subdirectories include/ and lib/. The default installation location |
|---|
| 195 | has changed in release 2.2.0; it was /usr/local/pqxx before. |
|---|
| 196 | |
|---|
| 197 | Assuming this succeeds, you should now be able to build your own programs by |
|---|
| 198 | adding /usr/local/pqxx/include to your include path, and /usr/local/pqxx/lib to |
|---|
| 199 | your library search path. See the documentation and the test programs for more |
|---|
| 200 | information on using libpqxx. |
|---|
| 201 | |
|---|
| 202 | One other thing here that may not work is that, if you link with the dynamic |
|---|
| 203 | version of the library, your program may fail to run because the run-time |
|---|
| 204 | loader cannot find the library. You can get around this by (i) linking to the |
|---|
| 205 | static version of the library, or (ii) adding a link in /usr/local/lib to the |
|---|
| 206 | dynamic libpqxx library, or (iii) adding libpqxx's lib/ directory to your |
|---|
| 207 | loader's search path before running your program. This is in decreasing order |
|---|
| 208 | of preference, so try (i) first, and only resort to (iii) if both (i) and (ii) |
|---|
| 209 | fail. On Unix-like systems including GNU/Linux, the loader's search path can be |
|---|
| 210 | extended by setting the LD_LIBRARY_PATH variable. |
|---|
| 211 | |
|---|
| 212 | Enjoy! |
|---|
| 213 | |
|---|
| 214 | |
|---|
| 215 | Building on Windows |
|---|
| 216 | |
|---|
| 217 | Project files for Visual C++ are provided in the win32 directory, along with |
|---|
| 218 | some other Windows-specific material. You'll need at least version 7 of the |
|---|
| 219 | VC compiler (also called VC.NET), earlier versions being too severely flawed to |
|---|
| 220 | build serious post-1996 C++ code. Some of the 7.x versions will work; others |
|---|
| 221 | may not. Versions of the library have also been built with Intel's compiler |
|---|
| 222 | running as a Visual C++ plugin. |
|---|
| 223 | |
|---|
| 224 | Instead of going this route, you may want to try if the Unix build procedure |
|---|
| 225 | works for you instead, e.g. using the Cygwin tools. If you don't, or it |
|---|
| 226 | doesn't, you'll need to copy the most appropriate compile-time configuration |
|---|
| 227 | files from various subdirectories in config/example-headers/ to include/pqxx. |
|---|
| 228 | You may need to tweak them manually to define the exact features your system, |
|---|
| 229 | compiler, and PostgreSQL versions support. Normally the configure script would |
|---|
| 230 | do this for you; in theory it should be possible to run the configure script |
|---|
| 231 | with e.g. Visual C++ as your compiler. |
|---|
| 232 | |
|---|
| 233 | Before trying to compile with Visual C++, you'll at least need to copy the file |
|---|
| 234 | win32/common-sample to win32/common, and edit the latter to reflect the proper |
|---|
| 235 | paths to your PostgreSQL headers and the libpq library. See the win32 |
|---|
| 236 | subdirectory for more documentation. |
|---|
| 237 | |
|---|
| 238 | |
|---|
| 239 | Manual Configuration: config-*-*.h |
|---|
| 240 | |
|---|
| 241 | Normally, on any vaguely Unix-like system, the configuration headers (called |
|---|
| 242 | config-internal-*.h for the library's internal use, config-public-*.h for |
|---|
| 243 | both the library and client programs) are generated from config.h.in. All these |
|---|
| 244 | files, once generated, are situated in the include/pqxx/ directory. |
|---|
| 245 | |
|---|
| 246 | The configitems file lists all configuration items and where they go; but see |
|---|
| 247 | win32/INSTALL.txt for a detailed description of how these files work. |
|---|
| 248 | |
|---|
| 249 | Getting the compiler-related configuration right can take several stages of |
|---|
| 250 | trying to build, looking at error messages, looking for configuration items that |
|---|
| 251 | may be related, changing them, and building again. If nothing seems to help, |
|---|
| 252 | try the libpqxx mailing list or register a bug report or support request on the |
|---|
| 253 | website. Be sure to read the FAQ though, because there are some known problems |
|---|
| 254 | with various compilers. |
|---|
| 255 | |
|---|
| 256 | |
|---|
| 257 | Windows-Specific Build Problems |
|---|
| 258 | |
|---|
| 259 | If you're using Microsoft's compiler, you may find that some features of the |
|---|
| 260 | library (such as reverse iterators) are left out. This is because Visual C++ is |
|---|
| 261 | not able to compile all of the library's code, and so the preprocessor was used |
|---|
| 262 | to disable such code if use of this compiler is detected. Several other |
|---|
| 263 | workarounds for compiler bugs are automatically switched on for Visual C++, |
|---|
| 264 | regardless of whether you use the configure script. |
|---|
| 265 | |
|---|
| 266 | Another problem specific to Windows is that apparently it doesn't let you free |
|---|
| 267 | memory in a DLL that was allocated in the main program or in another DLL, or |
|---|
| 268 | vice versa. This can cause trouble when setting Noticers to process error or |
|---|
| 269 | warning output; which is one reason why recommended practice is to build libpqxx |
|---|
| 270 | as a static library, not a DLL. When using Windows you must also take care to |
|---|
| 271 | set all Noticers from the same context where the Connection is created. |
|---|
| 272 | |
|---|
| 273 | |
|---|
| 274 | Documentation |
|---|
| 275 | |
|---|
| 276 | The best information on programming with libpqxx can be found in the header |
|---|
| 277 | files themselves, in the include/pqxx/ directory. Comments and declarations |
|---|
| 278 | from these headers are automatically extracted, using a program called Doxygen, |
|---|
| 279 | to form the HTML reference documentation that can be found in the |
|---|
| 280 | doc/html/Reference/ directory. You'll want to start off by reading about the |
|---|
| 281 | connection class and the transaction_base class (though in practice you'll |
|---|
| 282 | mostly use the convenience typedef "work"). |
|---|
| 283 | |
|---|
| 284 | To get a good start in programming libpqxx, however, you may prefer to have some |
|---|
| 285 | introductory explanation and code examples. The former can be found in the |
|---|
| 286 | tutorial, doc/html/Tutorial which currently is not being actively maintained but |
|---|
| 287 | does cover the basics accurately. The tutorial is generated from the input |
|---|
| 288 | file doc/libpqxx.sgml at release time. |
|---|
| 289 | |
|---|
| 290 | For some quick examples, take a look at the test programs in the test/ |
|---|
| 291 | directory. If you don't know how a certain function or class is used, try |
|---|
| 292 | searching the test programs for that name. This may be the quickest way to a |
|---|
| 293 | working example. |
|---|
| 294 | |
|---|
| 295 | When reading the test programs, please keep in mind that these do a lot of |
|---|
| 296 | checking and verifying to see that the library works correctly. This is done |
|---|
| 297 | at test time precisely so that you won't need to do that in your own code. You |
|---|
| 298 | are not meant to imitate all those safety checks yourself; libpqxx encourages a |
|---|
| 299 | relatively care-free programming style. Rely on the exception mechanism for |
|---|
| 300 | error handling and concentrate on your goals, not the plumbing. |
|---|
| 301 | |
|---|
| 302 | |
|---|
| 303 | Programming with libpqxx |
|---|
| 304 | |
|---|
| 305 | Your first program will involve the libpqxx classes connection (see headers |
|---|
| 306 | "pqxx/connection_base.hxx" and "pqxx/connection.hxx"), and work (a convenience |
|---|
| 307 | typedef for transaction<> which conforms to the interface defined in |
|---|
| 308 | "pqxx/transaction_base.hxx"). |
|---|
| 309 | |
|---|
| 310 | These "*.hxx" headers are not the ones you include in your program. Instead, |
|---|
| 311 | include the versions without filename suffix (i.e. "pqxx/connection_base" etc.) |
|---|
| 312 | and they will include the .hxx files for you. This was done so that includes |
|---|
| 313 | are in standard C++ style (as in <iostream> etc.), but an editor will still |
|---|
| 314 | recognize them as files containing C++ code. |
|---|
| 315 | |
|---|
| 316 | Continuing the list of classes, you will most likely also need the result class |
|---|
| 317 | ("pqxx/result.hxx"). In a nutshell, you create a "connection" based on a |
|---|
| 318 | Postgres connection string (see below), create a "work" in the context of that |
|---|
| 319 | connection, and run one or more queries on the work which return "result" |
|---|
| 320 | objects. The results are containers of rows of data, each of which you can |
|---|
| 321 | treat as an array of strings: one for each field in the row. It's that simple. |
|---|
| 322 | |
|---|
| 323 | Here is a simple example program to get you going, with full error handling: |
|---|
| 324 | |
|---|
| 325 | #include <iostream> |
|---|
| 326 | #include <pqxx/pqxx> |
|---|
| 327 | |
|---|
| 328 | using namespace std; |
|---|
| 329 | using namespace pqxx; |
|---|
| 330 | |
|---|
| 331 | int main() |
|---|
| 332 | { |
|---|
| 333 | try |
|---|
| 334 | { |
|---|
| 335 | connection C; |
|---|
| 336 | cout << "Connected to " << C.dbname() << endl; |
|---|
| 337 | work W(C); |
|---|
| 338 | |
|---|
| 339 | result R = W.exec("SELECT name FROM employee"); |
|---|
| 340 | |
|---|
| 341 | cout << "Found " << R.size() << "employees:" << endl; |
|---|
| 342 | for (result::const_iterator r = R.begin(); |
|---|
| 343 | r != R.end(); |
|---|
| 344 | ++r) |
|---|
| 345 | { |
|---|
| 346 | cout << r[0].c_str() << endl; |
|---|
| 347 | } |
|---|
| 348 | |
|---|
| 349 | cout << "Doubling all employees' salaries..." << endl; |
|---|
| 350 | W.exec("UPDATE employee SET salary=salary*2"); |
|---|
| 351 | |
|---|
| 352 | cout << "Making changes definite: "; |
|---|
| 353 | W.commit(); |
|---|
| 354 | cout << "ok." << endl; |
|---|
| 355 | } |
|---|
| 356 | catch (const exception &e) |
|---|
| 357 | { |
|---|
| 358 | cerr << e.what() << endl; |
|---|
| 359 | return 1; |
|---|
| 360 | } |
|---|
| 361 | return 0; |
|---|
| 362 | } |
|---|
| 363 | |
|---|
| 364 | |
|---|
| 365 | Connection strings |
|---|
| 366 | |
|---|
| 367 | Postgres connection strings state which database server you wish to connect to, |
|---|
| 368 | under which username, using which password, and so on. Their format is defined |
|---|
| 369 | in the documentation for libpq, the C client interface for PostgreSQL. |
|---|
| 370 | Alternatively, these values may be defined by setting certain environment |
|---|
| 371 | variables as documented in e.g. the manual for psql, the command line interface |
|---|
| 372 | to PostgreSQL. Again the definitions are the same for libpqxx-based programs. |
|---|
| 373 | |
|---|
| 374 | The connection strings and variables are not fully and definitively documented |
|---|
| 375 | here; this document will tell you just enough to get going. Check the |
|---|
| 376 | PostgreSQL documentation for authoritative information. |
|---|
| 377 | |
|---|
| 378 | The connection string consists of attribute=value pairs separated by spaces, |
|---|
| 379 | e.g. "user=john password=1x2y3z4". The valid attributes include: |
|---|
| 380 | |
|---|
| 381 | host |
|---|
| 382 | Name of server to connect to, or the full file path (beginning with a |
|---|
| 383 | slash) to a Unix-domain socket on the local machine. Defaults to |
|---|
| 384 | "/tmp". Equivalent to (but overrides) environment variable PGHOST. |
|---|
| 385 | |
|---|
| 386 | hostaddr |
|---|
| 387 | IP address of a server to connect to; mutually exclusive with "host". |
|---|
| 388 | |
|---|
| 389 | port |
|---|
| 390 | Port number at the server host to connect to, or socket file name |
|---|
| 391 | extension for Unix-domain connections. Equivalent to (but overrides) |
|---|
| 392 | environment variable PGPORT. |
|---|
| 393 | |
|---|
| 394 | dbname |
|---|
| 395 | Name of the database to connect to. A single server may host multiple |
|---|
| 396 | databases. Defaults to the same name as the current user's name. |
|---|
| 397 | Equivalent to (but overrides) environment variable PGDATABASE. |
|---|
| 398 | |
|---|
| 399 | user |
|---|
| 400 | User name to connect under. This defaults to the name of the current |
|---|
| 401 | user, although PostgreSQL users are not necessarily the same thing as |
|---|
| 402 | system users. |
|---|
| 403 | |
|---|
| 404 | requiressl |
|---|
| 405 | If set to 1, demands an encrypted SSL connection (and fails if no SSL |
|---|
| 406 | connection can be created). |
|---|
| 407 | |
|---|
| 408 | Settings in the connection strings override the environment variables, which in |
|---|
| 409 | turn override the default, on a variable-by-variable basis. You only need to |
|---|
| 410 | define those variables that require non-default values. |
|---|
| 411 | |
|---|
| 412 | Linking with libpqxx |
|---|
| 413 | |
|---|
| 414 | To link your final program, make sure you link to both the C-level libpq library |
|---|
| 415 | and the actual C++ library, libpqxx. On most Unix-style compilers, this can be |
|---|
| 416 | done using the options |
|---|
| 417 | |
|---|
| 418 | -lpq -lpqxx |
|---|
| 419 | |
|---|
| 420 | while linking. Note that both libraries must be in your link path, so the |
|---|
| 421 | linker knows where to find them. Any dynamic libraries you use must also be in |
|---|
| 422 | a place where the loader can find them when loading your program at runtime. |
|---|
| 423 | |
|---|
| 424 | Some users have reported problems using the above syntax, however, particularly |
|---|
| 425 | when multiple versions of libpqxx are partially or incorrectly installed on the |
|---|
| 426 | system. If you get massive link errors, try removing the "-lpqxx" argument from |
|---|
| 427 | the command line and replacing it with the name of the libpqxx library binary |
|---|
| 428 | instead. That's typically libpqxx.a, but you'll have to add the path to its |
|---|
| 429 | location as well, e.g. /usr/local/pqxx/lib/libpqxx.a. This will ensure that the |
|---|
| 430 | linker will use that exact version of the library rather than one found |
|---|
| 431 | elsewhere on the system, and eliminate worries about the exact right version of |
|---|
| 432 | the library being installed with your program.. |
|---|
| 433 | |
|---|
| 434 | |
|---|
| 435 | APPENDIX A - Links |
|---|
| 436 | |
|---|
| 437 | Apple MacOS X http://www.apple.com/macosx/ |
|---|
| 438 | BSD http://www.bsd.org/ |
|---|
| 439 | C++ http://www.cs.rpi.edu/~musser/stl-book/ |
|---|
| 440 | Cygwin http://cygwin.com/ |
|---|
| 441 | Doxygen http://www.stack.nl/~dimitri/doxygen/ |
|---|
| 442 | gcc http://gcc.gnu.org/ |
|---|
| 443 | Google http://www.google.com/ |
|---|
| 444 | libpq http://candle.pha.pa.us/main/writings/pgsql/sgml/libpq.html |
|---|
| 445 | libpqxx http://pqxx.org/ |
|---|
| 446 | Linux http://www.linux.org/ |
|---|
| 447 | MinGW http://www.mingw.org/ |
|---|
| 448 | OpenSSL http://www.openssl.org/ |
|---|
| 449 | PostgreSQL http://www.postgresql.org/ |
|---|
| 450 | zlib http://www.zlib.org/ |
|---|
| 451 | |
|---|
| 452 | |
|---|
| 453 | APPENDIX B - Projects Using libpqxx |
|---|
| 454 | |
|---|
| 455 | This list is far from complete. It is known that there are many other projects |
|---|
| 456 | using libpqxx that are not included here. Some of them may be proprietary, or |
|---|
| 457 | even have no names. |
|---|
| 458 | |
|---|
| 459 | Inclusion does not imply endorsement. For all I know, the people running the |
|---|
| 460 | Google projects may be unhappy with libpqxx--or perhaps they may have stopped |
|---|
| 461 | using it by the time you read this! But obviously I'll do my best to ensure |
|---|
| 462 | that this does not happen. On to the list: |
|---|
| 463 | |
|---|
| 464 | As found on Google: |
|---|
| 465 | |
|---|
| 466 | DocConversion http://docconversion.sourceforge.net/ |
|---|
| 467 | Genea http://savannah.nongnu.org/projects/genea/ |
|---|
| 468 | Gnucomo http://www.gnucomo.org/ |
|---|
| 469 | MapServer http://mapserver.gis.umn.edu/ |
|---|
| 470 | QHacc http://qhacc.sourceforge.net/ |
|---|
| 471 | Vocal / Mascarpone http://www.vovida.org/ |
|---|
| 472 | |
|---|
| 473 | |
|---|
| 474 | Confirmed by authors: |
|---|
| 475 | |
|---|
| 476 | OKE http://www.liacs.nl/home/bsamwel/oke/prerelease-0.10/ |
|---|
| 477 | KOffice / Kexi http://www.kexi-project.org/ |
|---|
| 478 | KPoGre http://kpogre.sourceforge.net/ |
|---|
| 479 | Once MMORPG http://sourceforge.net/projects/once/ |
|---|
| 480 | Scippy http://dicomlib.swri.ca/scippy.html |
|---|
| 481 | |
|---|