Molecule Tutorials - Herong's Tutorial Examples - v1.25, by Dr. Herong Yang
Compile, Link and Run RDKit C++ API Examples
Provides a tutorial example on how to compile, link and run RDKit C++ API examples provided in the RDKit source package.
With RDKit installed and tested, now I can some example C++ programs provided in the RDKit source package to try its C++ API.
1. Locate the source code of example programs.
herong$ cd ~/rdkit/Docs/Book/C++Examples herong$ ls -l total 80 -rwxr-xr-x. 1 herong herong 1666 Apr 7 18:43 CMakeLists.txt -rwxr-xr-x. 1 herong herong 1241 Apr 7 18:43 example10.cpp -rwxr-xr-x. 1 herong herong 1671 Apr 7 18:43 example11.cpp -rwxr-xr-x. 1 herong herong 2240 Apr 7 18:43 example12.cpp -rwxr-xr-x. 1 herong herong 2298 Apr 7 18:43 example13.cpp -rwxr-xr-x. 1 herong herong 3084 Apr 7 18:43 example14.cpp -rwxr-xr-x. 1 herong herong 2312 Apr 7 18:43 example15.cpp -rwxr-xr-x. 1 herong herong 1278 Apr 7 18:43 example16.cpp -rwxr-xr-x. 1 herong herong 4547 Apr 7 18:43 example17.cpp -rwxr-xr-x. 1 herong herong 1029 Apr 7 18:43 example1.cpp -rwxr-xr-x. 1 herong herong 1876 Apr 7 18:43 example2.cpp -rwxr-xr-x. 1 herong herong 1419 Apr 7 18:43 example3.cpp -rwxr-xr-x. 1 herong herong 1970 Apr 7 18:43 example4.cpp -rwxr-xr-x. 1 herong herong 1476 Apr 7 18:43 example5.cpp -rwxr-xr-x. 1 herong herong 1669 Apr 7 18:43 example6.cpp -rwxr-xr-x. 1 herong herong 1993 Apr 7 18:43 example7.cpp -rwxr-xr-x. 1 herong herong 674 Apr 7 18:43 example8.cpp -rwxr-xr-x. 1 herong herong 1478 Apr 7 18:43 example9.cpp -rwxr-xr-x. 1 herong herong 1458 Apr 7 18:43 FindMyRDKit.cmake
2. Compile the first example, example1.cpp, with CPATH environment variable for RDKit header files.
herong$ export CPATH=/home/herong/rdkit/Code herong$ g++ -c example1.cpp herong$ ls -l example1.* -rwxr-xr-x. 1 herong herong 1029 Apr 7 18:43 example1.cpp -rw-rw-r--. 1 herong herong 94960 Apr 11 22:13 example1.o
3. Link the object code, example1.o, with RDKit dynamic libraries.
herong$ export LIBRARY_PATH=/home/herong/rdkit/lib herong$ export RDKIT_LIBS="-lRDKitFileParsers -lRDKitDepictor \ -lRDKitMolAlign \ -lRDKitMolTransforms -lRDKitEigenSolvers -lRDKitAlignment \ -lRDKitForceFieldHelpers -lRDKitSmilesParse -lRDKitSubstructMatch \ -lRDKitForceField -lRDKitOptimizer -lRDKitTrajectory -lRDKitGraphMol \ -lRDKitRingDecomposerLib -lRDKitRDGeometryLib -lRDKitDataStructs \ -lRDKitRDGeneral -lRDKitcoordgen -lRDKitmaeparser" herong$ g++ $RDKIT_LIBS -o example1 example1.o herong$ ls -l example1 -rwxrwxr-x. 1 herong herong 55608 Apr 11 22:22 example1
4. Run the executable code, example1, with LD_LIBRARY_PATH for RDKit dynamic libraries.
herong$ export LD_LIBRARY_PATH=/home/herong/rdkit/lib herong$ ./example1 Number of atoms 7 Number of atoms : 11 Explicit valence for atom # 1 O, 3, is greater than permitted Can't kekulize mol. Unkekulized atoms: 0 1 2
5. Repeat for other examples.
herong$ g++ $RDKIT_LIBS -o example2 example2.cpp /usr/bin/ld: /home/herong/rdkit/lib/libRDKitmaeparser.so: undefined reference to symbol '_ZN5boost9iostreams4zlib4okayE' //usr/lib64/libboost_iostreams.so.1.66.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status herong$ g++ $RDKIT_LIBS -o example3 example3.cpp herong$ ./example3 C[C@H](O)c1ccccc1 CC(O)c1ccccc1 c1ccncc1 c1ccncc1 c1ccncc1 C[C@H](O)C1=CC=CC=C1 ... herong$ g++ $RDKIT_LIBS -o example4 example4.cpp /tmp/ccxa2yre.o: In function `RDKit::DGeomHelpers::EmbedMolecule(...)': example4.cpp: undefined reference to `RDKit::DGeomHelpers::EmbedMultipleConfs(...)' collect2: error: ld returned 1 exit status herong$ g++ $RDKIT_LIBS -o example5 example5.cpp herong$ ./example5 mol-295 RDKit 3D 20 22 0 0 1 0 0 0 0 0999 V2000 2.3200 0.0800 -0.1000 C 0 0 0 0 0 0 0 0 0 0 0 0 1.8400 -1.2200 0.1200 C 0 0 0 0 0 0 0 0 0 0 0 0 3.6800 0.0800 0.2600 C 0 0 0 0 0 0 0 0 0 0 0 0 ... herong$ g++ $RDKIT_LIBS -o example6 example6.cpp herong$ ./example6 6 8 6 6 8 6 1 1 1 0 0 0 0 to 0 is 1 No bond between 0 and 3 1 : 8 0 : 6 herong$ g++ $RDKIT_LIBS -o example7 example7.cpp herong$ ./example7 0 1 2 2 1 1 0 1 2 1 1 1 1 Bond 1 is in a ring Atom 2 is in ring of size 3 : 1 Atom 2 is in ring of size 4 : 1 Atom 2 is in ring of size 5 : 0 Bond 1 is in ring of size 3 : 1 Atom 1 is in ring of size 5 : 0 Number of symmetric SSSR rings : 2 1 2 3 4 5 2 3 Number of SSSR rings : 2 herong$ g++ $RDKIT_LIBS -o example8 example8.cpp herong$ ./example8 Number of atoms : 3 Number of atoms : 9 Number of atoms : 3 herong$ g++ $RDKIT_LIBS -o example9 example9.cpp herong$ ./example9 Order : 12 Aromatic : 1 After default Kekulize : Order : 2 After default Kekulize : Aromatic : 0 After Kekulize, markAtomsBonds false : Aromatic : 1 After Kekulize, markAtomsBonds true : Aromatic : 0 Order : 12 Aromatic : 1 herong$ g++ $RDKIT_LIBS -o example10 example10.cpp herong$ ./example10 CoordGen support not available herong$ g++ $RDKIT_LIBS -o example11 example11.cpp /tmp/ccv0U38c.o: In function `main': example11.cpp:(.text+0x9fc): undefined reference to `RDKit::DGeomHelpers::ETKDG' ... herong$ g++ $RDKIT_LIBS -o example12 example12.cpp herong$ ./example12 c1ccncc1 Wrote 5289 molecules Read mol of name : 1 Read 5289 molecules. herong$ g++ $RDKIT_LIBS -o example13 example13.cpp /tmp/ccLRCjCS.o: In function `main': example13.cpp:(.text+0x1af): undefined reference to `RDKit::MolDraw2D::drawMolecule(...)' ... herong$ g++ $RDKIT_LIBS -o example14 example14.cpp herong$ ./example14 Pattern matched molecule : (0,0)(1,5)(2,6) Match 1 : (0,0)(1,5)(2,6) Match 2 : (0,4)(1,5)(2,6) There were 22 hits in the file. SMILES match SMARTS match SMILES match Not SMARTS match SMARTS match herong$ g++ $RDKIT_LIBS -o example15 example15.cpp herong$ ./example15 SMARTS 1 match SMARTS 2 match SMARTS 3 match SMARTS 1 chiral match Not SMARTS 2 chiral match SMARTS 3 chiral match Chiral mol, non-chiral query : match Non-chiral mol, chiral query : NO match herong$ g++ $RDKIT_LIBS -o example16 example16.cpp herong$ ./example16 0 1 3 4 Match 1 : 1 7 8 10 herong$ g++ $RDKIT_LIBS -o example17 example17.cpp /tmp/ccHQoWV7.o: In function `main': example17.cpp:(.text+0x6d2): undefined reference to `RDKit::MolDraw2D::drawMolecule(...)'
Cool. Most RDKit C++ API examples are working! Some linking issues might be caused by dynamic library references.
Table of Contents
Molecule Names and Identifications
Nucleobase, Nucleoside, Nucleotide, DNA and RNA
►RDKit: Open-Source Cheminformatics Software
Build RDKit from Source Code on CentOS System
►Compile, Link and Run RDKit C++ API Examples
ChEMBL Database - European Molecular Biology Laboratory
PubChem Database - National Library of Medicine
INSDC (International Nucleotide Sequence Database Collaboration)
HGNC (HUGO Gene Nomenclature Committee)