我遇到了一个奇怪的问题,即gcc似乎正在更改函数签名并在parmaeter上丢弃const限定符。
我在声明为
的名称空间中有一个方法namespace Foo {
bool CompressJPEG_8(const Buffer &input,
const unsigned int nWidth, const unsigned int nHeight,
const unsigned int nNumComponents, Buffer &compressed);
}
gcc抱怨方法Foo::CompressJPEG_08(Foo::Buffer const& input ... )
是一个未定义的引用。
当我运行nm时,在生成的目标代码上我看到:
U Foo::CompressJPEG_8(Foo::Buffer const&, unsigned int, unsigned int, unsigned int, Foo::Buffer&)
0000000000192f5c T Foo::CompressJPEG_8(Foo::Buffer&, unsigned int, unsigned int, unsigned int, Foo::Buffer&)
由于某些原因,gcc删除了第一个参数的const
限定符,但我无法弄清楚原因。我怀疑这与jpeg库方法在extern
" C"中声明的事实有关。 { }
阻止,但我不确定原因。