неопределенная ссылка на cblas_sgemm

У меня есть следующий файл make

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: в функции Matrix::scaleAddAB(Matrix const&, Matrix const&, float, float)':
/home/ncelm/Matrix.cc:316: undefined reference to
cblas_sgemm»
/tmp/cc9NLGFL.o: в функции Matrix::scaleAddAtransB(Matrix const&, Matrix const&, float, float)':
/home/ncelm/Matrix.cc:330: undefined reference to
cblas_sgemm»
/tmp/cc9NLGFL.o: в функции 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, Невозможно понять, почему?

2

Решение

Как отмечает пользователь 6292850, -L Параметр принимает имя каталога, а не имя библиотеки. Чтобы назвать библиотеку, используйте -lcblas, Вам, вероятно, не нужно использовать -L в этом случае, потому что /usr/lib64 скорее всего на пути поиска по умолчанию.

Еще один совет: поместите параметры компоновщика и имена библиотек. после любые имена файлов источника и объекта в командной строке. В делать условно это будет выглядеть примерно так:

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

Вы делаете это потому, что компоновщик работает как бы вниз по линии, чтобы разрешить имена. Если в вашем примере util.cc использует функцию cblas, компоновщик может не найти ее, если библиотека не появится справа в командной строке.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]