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

Vladislav Martin martin.vl at husky.neu.edu
Wed Jul 6 17:36:39 CEST 2016


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.

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>
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>
> 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
>> --
>> 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.
>
>
> --
> 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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://maillist.sys.kth.se/pipermail/gromacs.org_gmx-developers/attachments/20160706/8fdf4056/attachment.html>


More information about the gromacs.org_gmx-developers mailing list