找不到GCC-5.0编译符号预期出现:平面名称空间错误

时间:2019-10-13 17:03:14

标签: c++ libstdc++ gcc5

我正在尝试从gcc-5.0上的源代码安装OS X 10.7.4,并在gcc-4.2/usr中安装(苹果内置的)gcc-5.0。安装在gmp中的适当版本的gcc依赖项(mpfrmpc/usr/local),它们都可以正常工作。我尝试(重新)安装gcc-5.0的原因是因为我想将其安装到/usr/local/gcc-5.0之类的单独文件夹中,因此配置脚本是从空gcc-5.0-build文件夹开始的)

../gcc-5.0-src/configure --prefix=/usr/local/gcc-5.0 --with-gmp=/usr/local/lib --with-mpfr=/usr/local/lib --with-mpc=/usr/local/lib --enable-languages=c,c++

make和大约1GB的编译文件之后,出现此错误(被截断)

dyld: Symbol not found: __ZNKSt11logic_error4whatEv
  Referenced from: <my-build-dir>/x86_64-apple-darwin11.4.0/libstdc++-v3/src/.libs/libstdc++.6.dylib
  Expected in: flat namespace

浏览了Stackoverflow中的许多网页和帖子后,我尝试了各种方法,例如:

LDFLAGS="-flat_namespace"之前添加./configure

使用Apple构建的gcc-4.2而不是gcc-5.0

进行编译

但幸运的是,我仍然会遇到此错误。

检查libstdc++.6.dylib

nm -g x86_64-apple-darwin11.4.0/libstdc++-v3/src/.libs/libstdc++.6.dylib | grep  __ZNKSt11logic_error4whatEv

返回:U __ZNKSt11logic_error4whatEv,因此其中包含有问题的符号。

otool -hv x86_64-apple-darwin11.4.0/libstdc++-v3/src/.libs/libstdc++.6.dylib

返回(截断的)DYLDLINK TWOLEVEL,表示它是两级名称空间lib。

我的问题是:

1-在消息Expected in: flat namespace中是否表示编译器绝对只需要平面名称空间库?我的意思是,绝对不可能使用此两级名称空间lib? @ G.M发表评论后。该符号未在所讨论的库中定义,因此使flat namespace的存在与否无关紧要,因为引起问题的是库的 content 而不是类型。

2-我应该怎么做才能解决此问题并编译gcc-5.0

谢谢。

1 个答案:

答案 0 :(得分:0)

我在发布模式下运行应用程序时遇到了相同的错误。 经过两天的搜索,我设法通过关闭动态库项目构建设置中的默认隐藏的符号来解决该问题。 希望这对您和其他具有相同错误的人有所帮助。