编译相关

C++ 编译相关的错误整理 #

undefined reference to XXX #

这是非常常见的一个问题,原因差不多有以下三点:

  1. 编译器找不到定义了XXX的文件;
  2. 定义了XXX的文件,由于函数修饰的原因里面没有想要的XXX符号;
  3. 找到了想要的符号,但是该符号是隐藏属性,不能链接使用;
    详细的解释与解决方法请查看参考资料

参考资料 #

“undefined reference to XXX” 问题总结

expected primary-expression before xx token #

这里的 xx 指的是一半都是运算符,比如 ++

** 示例 ** expected primary-expression before ')' token

** 原因 ** 把类型(type)当成变量来用了(variable)

** 参考资料 ** expected primary-expression before xx token 错误处理

expected unqualified-id before ‘(’ token #

** 原因 ** 头文件的引用顺序引起的,只需要调整引用该头文件的其他文件在报错的 .cpp 文件中的引用顺序即可,一般将该文件或者引用该头文件的头文件置于自定义头文件的前面。

** 参考资料 ** linux下编译复数类型引发的错误:expected unqualified-id before ‘(’token
expected unqualified-id before ‘(’ token

DSO missing from command line #

出现的场景:

  1. 我们有一个shared libA中,定义了函数foo()
  2. 另一个静态库libB显示地链接了libA
  3. 一个可执行文件bin_c显示地链接了libA

** 原因 ** 不会自动递归链接动态库,需要手动指明。

** 参考资料 ** DSO missing from command line 原因及解决办法

error: explicit qualification in declaration of xxx #

** 示例 **

    namespace threedog {
        void threedog::func(int i);
    }

上面这种写法编译时就会报错误信息 error: explicit qualification in declaration of 'threedog'

** 原因 ** 已经在命名空间中,却又在声明中加上了限定符。去掉错误信息中提示的限定符即可。

** 参考资料 ** C++编译错误 :error: explicit qualification in declaration of xxx