Re: free in C++?
"James K. Lowden" <[email protected]> Mon, 4 Feb 2008 21:10:04 -0500
| Newsgroups | gmane.os.netbsd.help |
|---|---|
| Message-ID | <[email protected]> |
Martijn van Buul wrote: > > The free manpage indicates this is a libc diagnostic. Trying to > > follow directions, I put > > > > extern char *malloc_options; > > The manpage calls for _malloc_options. Note the leading underscore. > Also, since you're calling this from C++, you will need to explicitly > tell it to use C linkage. This is not a NetBSD issue, but a C-vs-C++ > issue. > > try > > extern "C" char *_malloc_options; > char *_malloc_options = "X"; Well, that's odd. I suppose I should have mentioned $ uname -sr && c++ -v 2>&1 | grep version NetBSD 2.0 gcc version 3.3.3 (NetBSD nb3 20040520) My libc agrees with my man page and has no leading underscore: $ nm /usr/lib/libc.a | grep malloc_options 00000004 C malloc_options I tried your suggestion and got: /usr/include/g++/bits/stl_deque.h:1065: undefined reference to `_malloc_options' AFAIK your point about external linkage applies only to functions, not global (file-scope) variables, because only functions have mangled names. I found using getopt(3) from a C++ function I can *not* declare e.g. optarg as extern "C". I suppose this is really a gcc question; I just hoped to get lucky here. --jkl