变量模板链接失败
Variable template fails to link
以下代码:
template<typename T>
constexpr T foo { 1.2345 };
template<typename T>
T fun(T x) {
return -foo<T> * x;
}
int main() {
fun(2.0);
}
在 Linux 上使用 gcc 版本 5.1.0 编译
g++ gcc-bug.cpp -std=c++14
在链接步骤中失败,并显示以下消息:
/tmp/ccuciovi.o: In function `double fun<double>(double)':
gcc-bug.cpp:(.text._Z3funIdET_S0_[_Z3funIdET_S0_]+0xd): undefined reference to `foo<double>'
collect2: error: ld returned 1 exit status
删除一元减号(这会改变代码的含义)可以消除链接错误。前缀零(不会改变代码的含义)也可以消除错误。foo
的以下两个实现会导致成功的编译:
template<typename T>
T fun(T x) {
return foo<T> * x; // different meaning
}
template<typename T>
T fun(T x) {
return 0 - foo<T> * x; // same meaning
}
我在其他编译器中没有观察到这种行为。原始代码(带有一元减号)使用 clang 3.6.0 和 gcc 5.2.0 编译并运行良好。
在我将其作为 gcc 5.1.0 中的错误提交之前,我想听听您对这种行为的看法。
使用...海湾合作委员会 5.2.0
可能 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65719
相关文章:
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 链接 c++ 动态库一直失败
- 链接器命令失败,macOS 上的退出代码为 1(使用 -v 查看调用)
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 如何在 Linux 中构建共享库时使未定义引用的链接器失败
- mapreduce c编程与-fPIC链接失败,如何解决?
- Xcode:链接器命令失败,退出代码为 1(使用 -v 查看调用)[C++]
- 引用构造函数时链接失败
- 通过嵌入式 IWebBrowser2 控件中的链接打开 youtube 搜索失败
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- CMake链接库在Docker映像中失败
- 生成库失败:无法识别文件格式;作为链接器脚本处理
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- Android Studio 链接器命令在包含 Boost 库时失败
- 链接 openGL 库失败,因为它无法打开 libgl.so ...但它就在那里