<html><body><p><tt>Dmitri Gribenko &lt;gribozavr@gmail.com&gt; wrote on 06/02/2016 06:19:33 PM:<br>&gt; <br>&gt; Could you check if there are multiple definitions of off_t or mode_t<br>&gt; in different headers guarded by macros? &nbsp;Something like this,<br>&gt; duplicated across several headers:<br>&gt; <br>&gt; #if !defined(_OFF_T_DEFINED)<br>&gt; typedef __off_t off_t;<br>&gt; #define _OFF_T_DEFINED<br>&gt; #endif<br>&gt; <br>&gt; This is a frequent pattern used in C headers, but it is an antipattern<br>&gt; for modules. &nbsp;With modules, all headers that are included into the<br>&gt; module get #included into a single translation unit and compiled into<br>&gt; a module, so only one of those typedefs will get activated (let's say<br>&gt; in foo.h), and the other one will get hidden because it is seen second<br>&gt; in the translation unit (let's say the one in bar.h gets hidden). &nbsp;If<br>&gt; you then import just the submodule for bar.h, the off_t definition<br>&gt; won't be visible, because it was #ifdef'ed out.<br>&gt; <br>&gt; There are fragile solutions to this (like including a header that<br>&gt; happens to fix the build this time), but the only real fix is to make<br>&gt; sure that there is only one place where a declaration can be located<br>&gt; in a module, regardless of the set of headers.<br>&gt; <br></tt><br><tt>Thanks for the response Dmitri. &nbsp;Yes this is indeed the case. &nbsp;On my Ubuntu 15.10 system there are conditional typedefs of this flavor in 5 /usr/include/* header files for mode_t and in 6 header files for off_t.</tt><br><br><tt>What do you recommend I should try to work around the messy state of the system headers?</tt><br><br><tt>--dave</tt><br><BR>
</body></html>