我正在编写一个相当大的C++共享对象库,遇到了一个小问题,使得调试很麻烦:
如果我在头文件中定义一个函数/方法,并且忘记为它创建存根(在开发过程中),因为我正在构建共享对象库而不是可执行文件,没有错误出现在编译时告诉我已经忘记实现该函数。唯一的方法是在运行时找出有问题,当最终链接到这个库的应用程序崩溃并显示“未定义的符号”错误时。
我正在寻找一种简单的方法来检查我是否在编译时拥有所有需要的符号,也许是我可以添加到我的Makefile中的东西。
我想到的一个解决方案是通过nm -C -U
运行编译后的库以获取所有未定义引用的解码列表。但问题是,这也会出现其他库(例如GLibC)中的所有引用列表,当最终应用程序组装时,当然也会与该库链接在一起。可以使用nm
的输出来grep
我的所有头文件,并查看是否有任何相应名称..但这似乎很疯狂。毫无疑问,这不是一个罕见的问题,肯定有更好的解决办法。