You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by "Martin Sebor (JIRA)" <ji...@apache.org> on 2007/03/30 00:58:25 UTC

[jira] Commented: (STDCXX-377) [HP aCC +nostl] libc headers not in preprocessor search path

    [ https://issues.apache.org/jira/browse/STDCXX-377?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12485371 ] 

Martin Sebor commented on STDCXX-377:
-------------------------------------

One important detail I missed is that the problematic declarations in the libc headers in /usr/include (such as memchr, strchr, etc.) are only disabled when -AA is used and enabled when -Aa is specified, which prevents us from using -AA which the documentation suggests is incompatible with -Aa. it really isn't, but it's hard to tell given all the cautionary statements. See for example the aCC 3.70 online manual:
http://www.docs.hp.com/en/7762/5991-4874/options.htm#opt-capsAa
http://www.docs.hp.com/en/7762/5991-4874/options.htm#opt-AA

> [HP aCC +nostl] libc headers not in preprocessor search path
> ------------------------------------------------------------
>
>                 Key: STDCXX-377
>                 URL: https://issues.apache.org/jira/browse/STDCXX-377
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: External
>         Environment: HP aCC +nostl
>            Reporter: Martin Sebor
>            Priority: Critical
>
> In order to make it possible to link with third party implementations of the C++ Standard Library (such as stdcxx) the HP aCC +nostl option removes -lstd_v2, the HP aCC C++ standard library from the linker line. See http://www.docs.hp.com/en/7762/5991-4874/options.htm#opt+nostl
> The option also removes the directories containing the native C++ Standard Library headers from the compiler command line, presumably so as to prevent collisions between them and those provided by third party implementations of the same.
> However, the option also removes all other -I options from the compiler command line, including /usr/include, making it impossible for the preprocessor to find even libc or system headers. Add -I/usr/include is the only way to deal with it but doing so is typically frowned upon by compiler vendors, including HP. In addition, some of the HP libc headers in /usr/include make heavy use of preprocessor logic to disable the declarations of C functions that C++ replaces with its own, such as memchr() et al, making it even more difficult to use these headers.
> $ cat t.cpp && aCC -AA +nostl -V t.cpp || aCC -AA +nostl -I/usr/include t.cpp
> #include <cstring>
> int main ()
> {
>     memchr ("", 0, 0);
>     strchr ("", 0);
>     strpbrk ("", "");
>     strrchr ("", 0);
>     strstr ("", "");
> }
> aCC: HP ANSI C++ B3910B A.03.73
> Error 112: "t.cpp", line 1 # Include file <cstring> not found.
>     #include <cstring>
>              ^^^^^^^^^
> Error 328: "t.cpp", line 5 # Function 'memchr' has not been defined yet; cannot call.
>         memchr ("", 0, 0);
>         ^^^^^^            
> Error 328: "t.cpp", line 6 # Function 'strchr' has not been defined yet; cannot call.
>         strchr ("", 0);
>         ^^^^^^         
> Error 328: "t.cpp", line 7 # Function 'strpbrk' has not been defined yet; cannot call.
>         strpbrk ("", "");
>         ^^^^^^^          
> Error 328: "t.cpp", line 8 # Function 'strrchr' has not been defined yet; cannot call.
>         strrchr ("", 0);
>         ^^^^^^^         
> Error 328: "t.cpp", line 9 # Function 'strstr' has not been defined yet; cannot call.
>         strstr ("", "");
>         ^^^^^^          
> Error 112: "t.cpp", line 1 # Include file <cstring> not found.
>     #include <cstring>
>              ^^^^^^^^^
> Error 328: "t.cpp", line 5 # Function 'memchr' has not been defined yet; cannot call.
>         memchr ("", 0, 0);
>         ^^^^^^            
> Error 328: "t.cpp", line 6 # Function 'strchr' has not been defined yet; cannot call.
>         strchr ("", 0);
>         ^^^^^^         
> Error 328: "t.cpp", line 7 # Function 'strpbrk' has not been defined yet; cannot call.
>         strpbrk ("", "");
>         ^^^^^^^          
> Error 328: "t.cpp", line 8 # Function 'strrchr' has not been defined yet; cannot call.
>         strrchr ("", 0);
>         ^^^^^^^         
> Error 328: "t.cpp", line 9 # Function 'strstr' has not been defined yet; cannot call.
>         strstr ("", "");
>         ^^^^^^          

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.