gpt4 book ai didi

c++ - 对 cblas_sgemm 的 undefined reference

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:46:35 28 4
gpt4 key购买 nike

我有以下生成文件

g++ -Wall -O3 -g -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 Matrix.cc -L /usr/lib64/libcblas.so.0 util.cc word_io.cc net_lbl_2reps_scalable.cc train_lbl_2r_ptb.cc -o train_lbl_2r_ptb

但是我得到了错误

/tmp/cc9NLGFL.o: In function Matrix::scaleAddAB(Matrix const&, Matrix const&, float, float)':
/home/ncelm/Matrix.cc:316: undefined reference to
cblas_sgemm' /tmp/cc9NLGFL.o: In function Matrix::scaleAddAtransB(Matrix const&, Matrix const&, float, float)':
/home/ncelm/Matrix.cc:330: undefined reference to
cblas_sgemm' /tmp/cc9NLGFL.o: In function Matrix::scaleAddABtrans(Matrix const&, Matrix const&, float, float)':
/home/ncelm/Matrix.cc:344: undefined reference to
cblas_sgemm'

发生错误的函数:

void Matrix::scaleAddABtrans(const Matrix &A, const Matrix &B, float targetScale, float prodScale)
{
assert(A.rows() == rows() && A.cols() == B.cols() && B.rows() == cols());
::cblas_sgemm(CblasColMajor, CblasNoTrans, CblasTrans,
A.rows(), B.rows(), A.cols(),
prodScale, // Scale the product by 1
A.data(), A.rows(),
B.data(), B.rows(),
targetScale, // Scale the target by this before adding the product matrix
data(), rows());
}

它能够链接文件但找不到sgemm。无法理解为什么?

最佳答案

正如 user6292850 所指出的,-L 选项采用目录名称,而不是库名称。要命名库,请使用 -lcblas。在这种情况下,您可能不需要使用 -L,因为 /usr/lib64 可能位于默认搜索路径上。

另外一点建议:在命令行中将链接器选项和库名称​​放在任何源文件和目标文件名之后。在 ma​​ke 中,它通常看起来像这样:

$ c++ $(CXXFLAGS) -o train_lbl_2r_ptb $(SRC) $(LDFLAGS) -lcblas

您这样做是因为链接器按照它的方式工作,可以说是解析名称。如果在您的示例中,util.cc 使用 cblas 函数,则链接器可能找不到它,除非该库出现在命令行的右侧。

关于c++ - 对 cblas_sgemm 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37099605/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com