【发布时间】:2010-12-09 16:36:06
【问题描述】:
我正在编写一个相当大的 C++ 共享对象库,但遇到了一个让调试很痛苦的小问题:
如果我在头文件中定义了一个函数/方法,并且忘记为它创建一个存根(在开发过程中),因为我正在构建一个共享对象库而不是一个可执行文件,所以在编译时不会出现错误告诉我忘了实现那个功能。我发现问题的唯一方法是在运行时,当最终链接到该库的应用程序因“未定义符号”错误而崩溃时。
我正在寻找一种简单的方法来检查我是否在编译时拥有我需要的所有符号,也许我可以添加到我的 Makefile 中。
我提出的一个解决方案是通过nm -C -U 运行已编译的库,以获取所有未定义引用的解组列表。问题是这也会列出其他库中的所有引用列表,例如 GLibC,当最终应用程序放在一起时,这些引用当然会与这个库一起链接。可以通过我所有的头文件使用nm 到grep 的输出,看看是否有任何对应的名称.. 但这似乎很疯狂。当然这不是一个不常见的问题,有更好的解决方法吗?
【问题讨论】:
-
nm -C -u多次救了我! (注意我系统上的小写-u。)在此处留下此评论,以便下次需要时可以找到它。
标签: c++ linker shared-libraries