全网首发:Undefined symbols for architecture x86_64: “std::__1::locale::use_facet(std::__1::locale::id&)

102 篇文章 1 订阅
  • 吾是在MAC上编译OpenJDK8出的这个错误。而且这个错误是编译openjdk8u242时出现的。u252就没有这个错误。
  • gcc改为g++

试了无效果。

  • 增加-lstdc++

有时是必须的,有时不是。建议加上。

  • 具体错误:
Making adlc
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9 [-Wdeprecated]
Undefined symbols for architecture x86_64:
  "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int) in filebuff.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in filebuff.o
  "std::__1::ios_base::getloc() const", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int) in filebuff.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in filebuff.o
  "std::__1::ctype<char>::id", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int) in filebuff.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in filebuff.o
  "std::__1::locale::~locale()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int) in filebuff.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in filebuff.o
  "std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::id", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int) in filebuff.o
  "std::__1::ios_base::clear(unsigned int)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int) in filebuff.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush() in filebuff.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry() in filebuff.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in filebuff.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[6]: *** [../generated/adfiles/adlc] Error 1
make[5]: *** [ad_stuff] Error 2
make[4]: *** [product] Error 2
make[3]: *** [generic_build2] Error 2
make[2]: *** [product] Error 2
make[1]: *** [/Users/taishansoft/Downloads/openjdk8-u242/jdk8u242/build/macosx-x86_64-normal-server-release/hotspot/_hotspot.timestamp] Error 2
make: *** [hotspot-only] Error 2
  • 解决办法

经过一番辛苦搜索学习,连蒙带猜,找到的解决办法竟然是:

# NEW_INCLUDE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1

NEW_INCLUDE=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1

export   CFLAGS="-I$NEW_INCLUDE"
export CXXFLAGS="-I$NEW_INCLUDE"

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: undefined symbols for architecture x86_64 意思是在编译或链接时,找不到指定的符号或函数。这通常是由于缺少库文件或头文件,或者代码中存在语法错误或逻辑错误导致的。需要检查代码和依赖项,以解决这个问题。 ### 回答2: “undefined symbols for architecture x86_64”这个错误信息通常出现在使用C/C++语言进行编程时。这个错误表示在链接时缺少符号,编译器无法找到函数或变量的定义。在x86_64架构中,符号可能是函数、变量或其他代码,因此需要通过特定的符号解析过程来定义他们。 这个错误可以通过以下方法解决: 1.检查代码中是否有定义所有需要的函数和变量,如果有遗漏,需要添加定义。 2.检查头文件和库文件是否正确包含,必须确保所有必需的头文件和库文件都被正确链接。 3.检查编译器选项和链接器选项是否正确设置。如果编译时使用了新的标志或选项,可能需要更新链接器选项。 4.如果代码中使用了某些外部库的函数,则需要确保库已经被正确添加到链接器中。 5.如果使用了静态库,那么需要确保发布的静态库文件与正在编译的代码是匹配的。 在解决了上述问题后,编译器会将代码重新链接,以确保所有符号被正确解析。此时,就可以消除“undefined symbols for architecture x86_64”的错误提示,顺利完成编译和链接过程。 ### 回答3: "undefined symbols for architecture x86_64"是一种错误信息,通常出现在使用编译器或链接器编译和构建程序的过程中。这个错误信息表明,编译器或链接器无法找到代码中引用的某些函数或变量的定义。 这个错误信息提示中的“architecture x86_64”表示代码的编译架构是x86_64,即64位的x86架构。这个错误还可以在其他架构上出现,如ARM架构等。 这种错误通常是由于程序中调用的某些库或函数没有正确地链接到程序中,或者库或函数的定义没有包括在项目中导致的。解决这个问题的一种方法是检查相关的库或函数是否正确地链接到程序中,并确保它们的定义包括在项目中。可以使用命令行工具或IDE中的链接器选项来解决这个问题。 此外,也有可能是由于程序中使用了已过时的函数或库,或者程序中的代码出现了错误。在这种情况下,需要检查代码并修复错误,或者使用更新的函数或库来替换旧代码。 总之,“undefined symbols for architecture x86_64”是一个指出编译/链接过程中可执行文件依赖库不匹配或者找不到库函数的错误信息,需要检查相关链接库、函数定义文件和编译器选项并修正代码错误,以解决此问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳鲲鹏

能给阁下一点帮助,非常荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值