[gmx-developers] Fwd: Compilation Errors When Using GROMACS Headers/Library

David van der Spoel spoel at xray.bmc.uu.se
Thu Jul 7 14:45:55 CEST 2016


On 07/07/16 14:04, Vladislav Martin wrote:
>
> ---------- Forwarded message ----------
> From: *Vladislav Martin* <martin.vl at husky.neu.edu
> <mailto:martin.vl at husky.neu.edu>>
> Date: Wed, Jul 6, 2016 at 5:36 PM
> Subject: Re: [gmx-developers] Compilation Errors When Using GROMACS
> Headers/Library
> To: gmx-developers at gromacs.org <mailto:gmx-developers at gromacs.org>
>
>
> Mark,
>
> Perfect! Now I feel silly - in all honesty, I never knew that "it is
> normal behaviour for installed headers intended for third-party
> development to expect to have their path prepended by the preprocessor".
> Now that I know that, it is obvious that I simply needed to specify a
> directory to search for header files, by using the -I option
> <https://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/Preprocessor-Options.html#Preprocessor-Options>.
>
>> Do also be aware that libxdrfile is a thing.
>
> I am aware of libxdrfile, but as of yet I have yet to find enough
> documentation explaining it's use. The simple reason that I haven't used
> it is that I don't know how to use it.

How about the test file that is part of the source code of libxdrfile?


>
> So, I searched for other means that have already been implemented to
> read XTC trajectory files. After looking around the GROMACS 5.1.2 source
> code for references to XTC files, I was able to find the list_xtc(const
> char *fn) function specified in the dump.c source file located at
> src/gromacs/tools/dump.c. I used the code that I found in this function
> to write the read_trajectory.c file I was compiling.
>
> Where might I find documentation that explains how I can use the
> libxdrfile library to access all of the information that is accessed by
> the list_xtc function? Also, why do you recommend this library over just
> using the GROMACS header files - does it allow for more efficient
> reading of the XTC files?
>
>
> On Wed, Jul 6, 2016 at 5:06 PM, Mark Abraham <mark.j.abraham at gmail.com
> <mailto:mark.j.abraham at gmail.com>> wrote:
>
>     Hi,
>
>     It is normal behaviour for installed headers intended for
>     third-party development to expect to have their path prepended by
>     the preprocessor, e.g.
>
>     gcc -I/usr/local/gromacs/include yourfile.c
>     -L/usr/local/gromacs/lib/whatever -lgromacs
>
>     This means that the same header file can be used the same way when
>     compiling libgromacs, so one gets some sanity for free. Otherwise,
>     we'd also have to run some kind of script at "make install" time
>     that copied the files and edited them, similar to what you have done
>     with sed. Also, you'll have a harder time testing your code against
>     multiple versions of GROMACS if you've hard-coded the path to the
>     include files, perhaps in many places, directly in your code - the
>     -I option is very much your friend.
>
>     Do also be aware that libxdrfile is a thing.
>
>     Mark
>
>     On Wed, Jul 6, 2016 at 4:53 PM Vladislav Martin
>     <martin.vl at husky.neu.edu <mailto:martin.vl at husky.neu.edu>> wrote:
>
>         Dear GROMACS developers,
>
>         I am writing code in C utilizing the GROMACS 5.1.2 library. The
>         purpose of the code is to read the binary data stored in
>         GROMACS' XTC trajectory files into C data types for further
>         analysis / manipulation of the data.
>
>         *NOTE*: In case this would be important information, I followed
>         the "Quick and Dirty Installation"
>         <http://manual.gromacs.org/documentation/5.1.2/install-guide/index.html#quick-and-dirty-installation>
>         instructions for GROMACS 5.1.2 and all commands were executed in
>         the terminal successfully.
>
>         Back to the C code. At the very top of my file, I include
>         "/usr/local/gromacs/include/gromacs/fileio/xtcio.h" so that I
>         may access the functions I need to read the XTC trajectory
>         files. I ran into an odd error when attempting to compile my
>         program.
>
>         ""
>         $ gcc -o read_trajectory read_trajectory.c -L
>         /usr/local/gromacs/lib/x86_64-linux-gnu/ -lgromacs
>         In file included from read_trajectory.c:3:0:
>         /usr/local/gromacs/include/gromacs/fileio/xtcio.h:41:35: fatal
>         error: gromacs/fileio/gmxfio.h: No such file or directory
>          #include "gromacs/fileio/gmxfio.h"
>                                            ^
>         compilation terminated.
>         ""
>
>         I can fix this error by running a bash command that searches
>         recursively through all header files in the
>         "usr/local/gromacs/include/gromacs" directory and replaces
>         'gromacs/' (which only shows up in #include statements) with
>         '/usr/local/gromacs/include/gromacs/' (or
>         '/path/to/your/installation/gromacs/include/gromacs/'). I have
>         included this bash command in case someone else experiences this
>         compilation error and wants to fix it quickly:
>
>         '""
>         $ sudo find /usr/local/gromacs/include/gromacs/ -name '*.h'
>         -type f -exec sed -i
>         's:gromacs/:/usr/local/gromacs/include/gromacs/:' {} \;
>         ""
>
>         Once I run this command, the program compiles successfully and I
>         am able to run the resulting executable without any further errors.
>
>         What confuses me is that this error could have been fixed when
>         the GROMACS header files were created in the first place - I
>         shouldn't have to fix the relative paths where the header files
>         are supposed to look for & find the other GROMACS header files.
>         From what I can tell (I read the #include directives
>         <http://manual.gromacs.org/documentation/5.1.2/dev-manual/includestyle.html>),
>         every header file is contained within the
>         "/usr/local/gromacs/include/gromacs/" directory (or, more
>         generally,
>         "/path/to/your/installation/gromacs/include/gromacs/"). Within
>         that directory there are modular directories that store related
>         headers, like "fileio/". Knowing all of this, why does an
>         #include statement referring to a GROMACS header file in that
>         _same_ directory say "gromacs/fileio/gmxfio.h" - which, as a
>         relative path, would _never_ point to the right directory -
>         instead of "gmxfio.h" or "./gmxfio.h", which actually reflects
>         this file hierarchy?
>
>         In the end, my question is simple: did I miss something in the
>         documentation that informs me on how to include GROMACS headers
>         files properly so that I don't have to change the include
>         statements myself? Otherwise, is this a syntax bug that will be
>         fixed in later GROMACS versions?
>
>
>         Many thanks,
>
>         Vladislav Martin
>         Research Assistant
>         Center for Nanobiology and Structural Biology
>         Email: martin.vl at husky.neu.edu <mailto:martin.vl at husky.neu.edu>
>         --
>         Gromacs Developers mailing list
>
>         * Please search the archive at
>         http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List
>         before posting!
>
>         * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>
>         * For (un)subscribe requests visit
>         https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers
>         or send a mail to gmx-developers-request at gromacs.org
>         <mailto:gmx-developers-request at gromacs.org>.
>
>
>     --
>     Gromacs Developers mailing list
>
>     * Please search the archive at
>     http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List
>     before posting!
>
>     * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>
>     * For (un)subscribe requests visit
>     https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers
>     or send a mail to gmx-developers-request at gromacs.org
>     <mailto:gmx-developers-request at gromacs.org>.
>
>
>
>
>


-- 
David van der Spoel, Ph.D., Professor of Biology
Dept. of Cell & Molec. Biol., Uppsala University.
Box 596, 75124 Uppsala, Sweden. Phone:	+46184714205.
spoel at xray.bmc.uu.se    http://folding.bmc.uu.se


More information about the gromacs.org_gmx-developers mailing list