【发布时间】:2018-08-30 13:48:32
【问题描述】:
我有一个项目要从 glibc 移植到 uclibc,但遇到了这个奇怪的问题。
gcc --std=c++11 Foo.cpp -o Foo-glibc
x86_64-linux-uclibc-gcc --std=c++11 Foo.cpp -o Foo-uclibc
// Compiles under glibc and uclibc
class Foo {
Foo() = default;
Foo(const Foo& arg) = delete;
~Foo() = default;
};
// Only compiles under glibc
class Foo {
Foo() = default;
Foo(const Foo& arg);
~Foo() = default;
};
Foo::Foo(const Foo& arg) = delete; // uclibc - Error: deleted definition of 'Foo::Foo(const Foo&)'
为什么会出现这个错误?这是预期的行为吗?我读过的任何内容都表明 uclibc 不应该能够处理这个问题。
【问题讨论】:
-
Ulibc 本身就是一个库,与编译器没有任何关系(至少与编译无关)。你确定你的 gcc 是同一个版本吗? (运行
gcc --version和x86_64-linux-uclibc-gcc --version -
gcc --version产生 4.8.5 和x86_64-linux-uclibc-gcc --version产生 7.3.0。所以这很可能与编译器之间的版本差异有关,尽管我不确定为什么较新的编译器会删除这个函数。 -
这可能是一个错误,它首先工作,在类声明中声明构造函数然后将其删除是没有意义的。类的消费者如何知道构造函数被删除?