- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下生成文件
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)':
cblas_sgemm' /tmp/cc9NLGFL.o: In function
/home/ncelm/Matrix.cc:316: undefined reference toMatrix::scaleAddAtransB(Matrix const&, Matrix const&, float, float)':
cblas_sgemm' /tmp/cc9NLGFL.o: In function
/home/ncelm/Matrix.cc:330: undefined reference toMatrix::scaleAddABtrans(Matrix const&, Matrix const&, float, float)':
cblas_sgemm'
/home/ncelm/Matrix.cc:344: undefined reference to
发生错误的函数:
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
可能位于默认搜索路径上。
另外一点建议:在命令行中将链接器选项和库名称放在任何源文件和目标文件名之后。在 make 中,它通常看起来像这样:
$ 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/
我在使用 cblas 的 sgemm 函数时遇到问题。 代码如下: #include #include #include #include #include #define MATRIX_D
我正在尝试使用 vecLibs 的 cblas 将两个矩阵相乘: #include #include #include #include int main (void) { float
我有 100 个 3x3x3 矩阵,我想将它们与另一个大小为 3x5x5 的大矩阵相乘(类似于用多个滤波器对一个图像进行卷积,但不完全一样)。 为了解释起见,这就是我的大矩阵的样子: >>> x =
我正在尝试使用 cblas_sgemm 对两个整数矩阵进行快速矩阵乘法。 现在它正在返回全零。 我运行了一个快速的原始矩阵乘法来仔细检查预期的输出数据,它们不应该为零。 工作 朴素的方法: typed
我有以下生成文件 g++ -Wall -O3 -g -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 Matrix.cc -L /usr/lib64/libcblas.so.
我正在尝试安装 numpy==1.10.2 , scipy和 matplotlib在基于 opensuse 的服务器上.我已经安装了 numpy在 virtualenv来自源代码(我也尝试过 pip
我有一个函数指针数组,我用它来调用适当的 cblas_xgemm(例如,cblas_dgemm 或 cblas_sgemm 等,来自 ATLAS/CBLAS)。 当我告诉它通过函数指针使用 cblas
这是我第一次尝试使用 ATLAS。我无法正确链接它。这是一个非常简单的 sgemm 程序: ... #include const int M=10; const int N=8; const int
我是一名优秀的程序员,十分优秀!