C++ 删除未使用的类

C++ 删除未使用的类,c++,gcc,g++4.9,C++,Gcc,G++4.9,我有以下代码: namespace rm { namespace lib { class Object { public: Object() {printf("Hi\n");} }; } } 现在我想使用g++-Wall-Wno unused-Werror-fPIC-g-Iinclude/-c-O0-o object.o object.cpp和g++-shared-o librm.so object.o将该类编译成一个共享库。编译工作没有问题,但是在

我有以下代码:

namespace rm {
  namespace lib {
    class Object {
    public:
      Object() {printf("Hi\n");}
    };
  }
}
现在我想使用
g++-Wall-Wno unused-Werror-fPIC-g-Iinclude/-c-O0-o object.o object.cpp
g++-shared-o librm.so object.o
将该类编译成一个共享库。编译工作没有问题,但是在使用
nm librm.so | c++filt
检查生成的库之后,找不到
rm::lib::Object::Object()
。即使启用了-Wextra,GCC也不会发出警告


G++版本是(Raspbian 4.9.2-10)4.9.2

类中定义的代码被隐式标记为内联(未使用),因此未保存在文件中。

类中定义的代码被隐式标记为内联(未使用),因此未保存在文件中。

目标文件是否仍有符号?尝试使用编译对象时使用的相同选项链接库-GCC手册中指出:“此外,在链接共享库时,您可能希望使用与编译对象时相同的标志。”是否在.cpp文件中定义类方法?因为从您的示例中可以看出,您的类完全是在一个.h文件中定义的。在构建so时,您可能还需要
-fPIC
-rdynamic
。@Jepessen在本例中不是,但应该没有任何区别,因为我在cpp文件中包含了头文件。但实际上,当在cpp文件中定义方法时,它是有效的。对象文件是否仍然有符号?尝试使用编译对象时使用的相同选项链接库-GCC手册中指出:“此外,在链接共享库时,您可能希望使用与编译对象时相同的标志。”是否在.cpp文件中定义类方法?因为从您的示例中可以看出,您的类完全是在一个.h文件中定义的。在构建so时,您可能还需要
-fPIC
-rdynamic
。@Jepessen在本例中不是,但应该没有任何区别,因为我在cpp文件中包含了头文件。但实际上,当在cpp文件中定义方法时,它是有效的。