MacPorts GCC 4.7 OS-X Mavericks 10.9 C11中未定义的符号"toupper"

Den*_*nis 8 c++ macos gcc macports xcode5

EDIT2:

所以这是一个程序的例子:

#include <stdio.h>
#include <ctype.h>
int main ()
{
  int i=0;
  char str[]="Test String.\n";
  char c;
  while (str[i])
  {
    c=str[i];
    putchar (toupper(c));
    i++;
  }
  return 0;
 }
Run Code Online (Sandbox Code Playgroud)

1)clang:

clang++ -std=c++0x -stdlib=libc++ -lc++ main.cc -o main

编译好.

2)g++-mp-4.8 -std=c++11 main.cc -o main给出:

Undefined symbols for architecture x86_64:
  "toupper(int)", referenced from:
      _main in ccWjHauc.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

3)g++-mp-4.8 main.cc -o main编译!

任何想法设置有什么问题?

==========

有人可以帮助理解Gcc/macports/os 10.9中的变化吗?

我以前在os 10.8中有一个第三方库的编译脚本.最近我更新到新的osx(10.9)和macports的gcc 4.7停止链接.特别是我有:

Undefined symbols for architecture x86_64:
 "isspace(int)", referenced from:
Run Code Online (Sandbox Code Playgroud)

这个问题是非常相似提到的在这里进行istype.但是它似乎isspace并不存在于libgcc ++.dylib中.

任何想法尝试什么?

EDIT1:

确实,4.8解决了问题isspace,但另一个浮出水面 - toupper:

Undefined symbols for architecture x86_64:
  "toupper(int)", referenced from: ...
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?!.它与新的Xcode(5.0)有关吗?

aar*_*gon 10

http://trac.macports.org/ticket/41033上有一个补丁 它解决了我的问题.您只需要在/usr/include/sys/cdefs.h中修补该文件并替换

#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__)
Run Code Online (Sandbox Code Playgroud)

通过

#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__) && !defined(__cplusplus)
Run Code Online (Sandbox Code Playgroud)

祝好运.