Compile error with gcc

Dimitry Andric dim at FreeBSD.org
Sun Feb 16 12:11:37 UTC 2014


On 16 Feb 2014, at 08:28, Garrett Cooper <yanegomi at gmail.com> wrote:
> On Feb 15, 2014, at 9:25 PM, Garrett Cooper <yaneurabeya at gmail.com> wrote:
> 
>> Hi Julio,
>> 	I ran into this error when trying to compile ATF with gcc on code based off of r261958:
>> 
>> --- application.So ---
>> /usr/src/contrib/atf/atf-c++/detail/application.cpp: In constructor 'atf::application::usage_error::usage_error(const char*, ...)':
>> /usr/src/contrib/atf/atf-c++/detail/application.cpp:71: error: 'vsnprintf' is not a member of 'std'
>> *** [application.So] Error code 1
>> 
>> 	I haven’t dug into why this is occurring yet, but I assume it’s because of the ATF 0.20 upgrade.
>> 	I’m compiling with gcc/g++ of course, and not clang/libcxxrt.
> 
> 	This patch seems to work with gcc and clang/libcxxrt. I didn’t try it without clang/libcxxrt though...
> Thanks!
> -Garrett
> 
> <0001-Unbreak-compiling-ATF-after-the-0.20-upgrade-with-gc.patch>

I don't think this will always work correctly.  If MK_LIBCPLUSPLUS is
defined in bsd.own.mk, it only means libc++ is being *built*, not that
it is being used.

It is probably easier and more fool-proof to check if _LIBCPP_VERSION is
defined (which is the case when you use libc++) in bconfig.h, like so:

Index: contrib/atf/bconfig.h
===================================================================
--- contrib/atf/bconfig.h       (revision 261974)
+++ contrib/atf/bconfig.h       (working copy)
@@ -56,7 +56,9 @@
 #define HAVE_UNSETENV 1

 /* Define to 1 if vsnprintf is in std */
+#ifdef _LIBCPP_VERSION
 #define HAVE_VSNPRINTF_IN_STD 1
+#endif

 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */

Finally, please note that libstdc++'s cstdio header *does* have a
declaration for vsnprintf(), but it is only active when _GLIBCXX_USE_C99
is defined.  Unfortunately, the libstdc++ configure script does not
define that variable when you run it, since according to the script,
we lack a few C99 maths functions.

-Dimitry

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 203 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/freebsd-testing/attachments/20140216/04c5bd53/attachment.sig>


More information about the freebsd-testing mailing list