【发布时间】:2017-10-09 14:01:02
【问题描述】:
g++ -fopenmp main.cpp 抱怨对std::vector 的未定义引用。如何解决这个问题?
我已经在 Ubuntu 上安装了 libomp-dev 包。
main.cpp
#include<vector>
#include<iostream>
template<typename T, typename A>
T recursiveSumBody(std::vector<T, A> &vec) {
T sum = 0;
#pragma omp task shared(sum)
{
sum = recursiveSumBody(vec);
}
return vec[0];
}
int main() {
std::vector<int> a;
recursiveSumBody(a);
return 0;
}
未定义的引用
/tmp/ccTDECNm.o: In function `int recursiveSumBody<int, std::allocator<int> >(std::vector<int, std::allocator<int> >&) [clone ._omp_cpyfn.1]':
main.cpp:(.text+0x148): undefined reference to `std::vector<int, std::allocator<int> >::vector(std::vector<int, std::allocator<int> > const&)'
collect2: error: ld returned 1 exit status
【问题讨论】:
-
有人见过这样的吗?我想我可以使用指向向量第 0 个元素的指针,而不是
std::vector,但如果可能的话,我宁愿不直接使用指针。 -
请注意,
libomp-dev是与gomp无关的 LLVM OpenMP 运行时,gomp是由gcc捆绑的 OpenMP 运行时。
标签: c++ openmp undefined-reference