当我启动gdb时,我有这样的消息:
$ gdb a.out
GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Thu Nov 3 21:59:02 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries .
warning: Could not find object file "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_gcc47/gcc47/work/build/x86_64-apple-darwin11/libstdc++-v3/src/../libsupc++/.libs/libsupc++convenience.a(array_type_info.o)" - no debug information available for "../../../../gcc-4.7.0/libstdc++-v3/libsupc++/array_type_info.cc".
warning: Could not find object file "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_gcc47/gcc47/work/build/x86_64-apple-darwin11/libstdc++-v3/src/../libsupc++/.libs/libsupc++convenience.a(bad_alloc.o)" - no debug information available for "../../../../gcc-4.7.0/libstdc++-v3/libsupc++/bad_alloc.cc".
似乎我需要再次获取libstdc ++但是如何使用macports?
答案 0 :(得分:1)
这是由Apple作为Xcode的一部分安装的特殊Unix环境引起的几个问题之一。如果您需要比Xcode安装的更新版本的gcc,请确保您还安装了较新版本的gdb,否则您将遇到上述问题。您还需要确保您的环境实际上调用两者的macport版本而不是默认的Xcode版本。
从macports安装gcc不会使命令'gcc'调用macports安装的gcc版本。同样,'gdb'也不会调用macports安装的gdb版本。由macports安装的版本具有路径'/opt/local/bin/gcc-mp-4.6'和'/ opt / local / ggdb'或类似的东西,取决于gcc的版本号。请注意,它是'ggdb'而不是'gdb'。
一种解决方案是始终通过提供整个路径显式调用正确的版本。另一种方法是使用指向macports版本的链接替换默认的gcc和gdb位置(这可能会导致Xcode出现问题)。默认位置是'/ usr / local / bin / gcc'和'/ usr / bin / gdb'。无论路径设置如何,默认的bash shell都会查看这些位置。
答案 1 :(得分:0)
http://gcc.gnu.org/gcc-4.5/changes.html说
GCC现在也会为结语生成展开信息。 GCC生成的DWARF debuginfo现在使用了比以前更多的DWARF3功能,以及一些DWARF4功能。早于7.0的GDB无法处理其中任何一个,因此需要调试GCC 4.5生成的二进制文件或库GDB 7.0或更高版本。您可以使用
-gdwarf-3 -gstrict-dwarf
选项禁用DWARF4功能,或使用-gdwarf-2 -gstrict-dwarf
将GCC限制为DWARF2,但只要发出展开信息,就会无条件地发出结尾展开信息。
所以你应该看看macports中是否有更新的GDB。