[gmx-developers] Compilation Errors When Using GROMACS Headers/Library
Christoph Junghans
junghans at votca.org
Wed Jul 6 17:33:17 CEST 2016
2016-07-06 9:06 GMT-06:00 Mark Abraham <mark.j.abraham at gmail.com>:
> 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
Actually
$ gcc yourfile.c `pkg-config --cflags --libs libgromacs`
is better as it adds needed defines (e.g. GMX_DOUBLE) as well.
In case pkg-config doesn't find your libgromacs.pc, you can hint it to
your installation location using:
$ export PKG_CONFIG_PATH=/usr/local/gromacs/include/gromacs/lib
Christoph
>
> 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" 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), 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.
--
Christoph Junghans
Web: http://www.compphys.de
More information about the gromacs.org_gmx-developers
mailing list