#41033: cctype functions (e.g. isprint) not defined at link time -------------------------+-------------------------------- Reporter: schnetter@… | Owner: macports-tickets@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.2.1 Keywords: | Port: gcc48 -------------------------+-------------------------------- I am using Mavericks, and I have C++ code that I want to build with GCC 4.8 and with the option -std=c++1. This code used std::isprint. The code builds fine, but at link time I receive the error message that isprint(int) is not defined. This code can reproduce the problem: {{{ #include <cctype> int main(int argc, char** argv) { std::isprint('a'); return 0; } }}} Build it with: {{{ g++ -std=c++11 -o isprint isprint.cc }}} and the linker will complain: {{{ $ g++ -std=c++11 -o isprint isprint.cc Undefined symbols for architecture x86_64: "isprint(int)", referenced from: _main in cc2AhhUM.o ld: symbol(s) not found for architecture x86_64 }}} The problem is that the system file /usr/include/sys/cdefs.h mis-uses a GCC extension handling the "inline" keyword. This file needs to be updated to not do so when called from C++. This patch does just this: {{{ $ diff -u /usr/include/sys/cdefs.h /opt/local/lib/gcc48/gcc/x86_64-apple- darwin13/4.8.1/include-fixed/sys/cdefs.h --- /usr/include/sys/cdefs.h 2013-10-23 14:56:58.000000000 -0400 +++ /opt/local/lib/gcc48/gcc/x86_64-apple-darwin13/4.8.1/include- fixed/sys/cdefs.h 2013-10-28 15:28:05.000000000 -0400 @@ -216,7 +225,7 @@ #if __STDC_VERSION__ >= 199901L && (!defined(__GNUC__) || defined(__clang__)) # define __header_inline inline -#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__) +#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__) && !defined(__cplusplus) # define __header_inline extern __inline __attribute__((__gnu_inline__)) #elif defined(__GNUC__) # define __header_inline extern __inline }}} With this modification, and with the modified file installed into /opt/local/lib/gcc48/gcc/x86_64-apple-darwin13/4.8.1/include- fixed/sys/cdefs.h, the sample program builds fine. I suggest to update gcc-4.8 in this way, i.e. to fix-include /usr/include/sys/cdefs.h in this way. I assume that gcc-4.7 and maybe other, earlier versions are affected as well. -- Ticket URL: <https://trac.macports.org/ticket/41033> MacPorts <http://www.macports.org/> Ports system for OS X