Closed xfwu closed 7 years ago
You can see that the g++ command line which runs in kaldi/src/bin does not include any CUDA libraries (such as libcublas.so). You can also see that libeesen.so depends on numerous CUDA functions when the g++ linker complains that it cannot find them.
If you built Eesen with this literal command, that would be a problem:
|./configure --use-cuda=yes --cudatk-dir=/path/to/cuda_library|
Because you need to replace "/path/to/cuda_library" with a valid path to an actual CUDA install dir, for example "/usr/local/cuda-7.5"
If your application does not require a GPU, then try rebuilding Eesen with --use-cuda=no and leave off the --cudatk-dir arguments, and then your make command will (hopefully) not have any CUDA dependencies, and build better.
On 10/27/2016 07:30 PM, Xiaofeng Wu wrote:
Hi
I want to expose the DecodeUtteranceLatticeFaster function in decoder/decoder-wrappers.cc to a function I am implementing in Kaldi.
Firstly, I created an library file use make biglib Then I copy the generated libeesen.so into the kaldi/tools/eesen/lib, and copy all the header file and their directory to kaldi/tools/eesen/include
I made according changes in the kaldi.mk and add the eeseninclude and eesenlib But during the linking stage, I saw the following mistakes: | xiaofeng@pgpu5:~/work/kaldi/src$ make The version of configure script matches kaldi.mk version. Good. test -d || mkdir make -C base make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/base' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/base' make -C matrix make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/matrix' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/matrix' make -C thread make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/thread' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/thread' make -C util make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/util' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/util' make -C tree make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/tree' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/tree' make -C gmm make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/gmm' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/gmm' make -C transform make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/transform' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/transform' make -C feat make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/feat' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/feat' make -C hmm make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/hmm' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/hmm' make -C sgmm make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/sgmm' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/sgmm' make -C fstext make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/fstext' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/fstext' make -C lm make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/lm' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/lm' make -C lat make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/lat' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/lat' make -C decoder make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/decoder' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/decoder' make -C kws make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/kws' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/kws' make -C cudamatrix make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/cudamatrix' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/cudamatrix' make -C nnet make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/nnet' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/nnet' make -C sgmm2 make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/sgmm2' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/sgmm2' make -C nnet2 make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/nnet2' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/nnet2' make -C chain make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/chain' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/chain' make -C nnet3 make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/nnet3' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/nnet3' make -C ivector make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/ivector' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/ivector' make -C online2 make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/online2' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/online2' make -C bin make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/bin' g++ -rdynamic -Wl,-rpath=/home/xiaofeng/work/kaldi/tools/openfst/lib -Wl,-rpath=/home/xiaofeng/work/kaldi/tools/eesen/lib align-equal.o ../decoder/kaldi-decoder.a ../lat/kaldi-lat.a ../lm/kaldi-lm.a ../fstext/kaldi-fstext.a ../hmm/kaldi-hmm.a ../transform/kaldi-transform.a ../gmm/kaldi-gmm.a ../tree/kaldi-tree.a ../util/kaldi-util.a ../thread/kaldi-thread.a ../matrix/kaldi-matrix.a ../base/kaldi-base.a -L/home/xiaofeng/work/kaldi/tools/openfst/lib -lfst /usr/lib/libatlas.so.3 /usr/lib/libf77blas.so.3 /usr/lib/libcblas.so.3 /usr/lib/liblapack_atlas.so.3 -L/home/xiaofeng/work/kaldi/tools/eesen/lib -leesen -lm -lpthread -ldl -o align-equal /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaGetDevice' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cublasDscal' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cublasShutdown' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cublasDaxpy' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaMallocPitch' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaThreadSynchronize' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaMemcpy2D' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaUnregisterFatBinary' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cublasSaxpy' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaInitModule' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaRegisterFatBinary' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cublasGetError' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaMemset2D' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaGetLastError' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaMalloc' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaMemcpy' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaRegisterVar' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |fst::ReverseProperties(unsigned long, bool)' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cublasSgemv' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cublasDgemm' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaGetDeviceProperties' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |fst::internal::DenseSymbolMap::~DenseSymbolMap()' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cublasSgemm' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cublasDgemv' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaMemset' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cublasSscal' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaConfigureCall' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaThreadExit' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|fst::internal::DenseSymbolMap::DenseSymbolMap()' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaMemcpyToSymbol' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaSetDevice' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaMemcpyFromSymbol' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaLaunch' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaGetErrorString' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cublasInit' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaGetDeviceCount' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|__cudaRegisterFunction' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to |cudaFree' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to|cudaSetupArgument' collect2: error: ld returned 1 exit status : recipe for target 'align-equal' failed make[1]: * [align-equal] Error 1 make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/bin' Makefile:140: recipe for target 'bin' failed make: * [bin] Error 2 `
looks like eesen did not compiled well with cuda, but I did use |./configure --use-cuda=yes --cudatk-dir=/path/to/cuda_library|
Could anyone help me with this?
Best
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/srvk/eesen/issues/105, or mute the thread https://github.com/notifications/unsubscribe-auth/ACX11irqKr_oJihYARQKCYXwPBExpzkDks5q4TP9gaJpZM4Ki7s4.
Eric Riebling Interactive Systems Lab er1k@cs.cmu.edu 407 South Craig St.
Agree, if you want to decode (only), you do not need CUDA and you should try to create a non-CUDA Eesen. I have done this and wrapped many smaller Eesen libraries with Python, for example.
thank you very much guys. I tried this, its much better!!
Best
Hi
I want to expose the DecodeUtteranceLatticeFaster function in decoder/decoder-wrappers.cc to a function I am implementing in Kaldi.
Firstly, I created an library file use
make biglib
Then I copy the generated libeesen.so into the kaldi/tools/eesen/lib, and copy all the header file and their directory to kaldi/tools/eesen/include
I made according changes in the kaldi.mk and add the eeseninclude and eesenlib But during the linking stage, I saw the following mistakes:
xiaofeng@pgpu5:~/work/kaldi/src$ make The version of configure script matches kaldi.mk version. Good. test -d || mkdir make -C base make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/base' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/base' make -C matrix make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/matrix' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/matrix' make -C thread make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/thread' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/thread' make -C util make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/util' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/util' make -C tree make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/tree' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/tree' make -C gmm make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/gmm' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/gmm' make -C transform make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/transform' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/transform' make -C feat make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/feat' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/feat' make -C hmm make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/hmm' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/hmm' make -C sgmm make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/sgmm' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/sgmm' make -C fstext make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/fstext' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/fstext' make -C lm make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/lm' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/lm' make -C lat make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/lat' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/lat' make -C decoder make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/decoder' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/decoder' make -C kws make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/kws' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/kws' make -C cudamatrix make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/cudamatrix' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/cudamatrix' make -C nnet make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/nnet' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/nnet' make -C sgmm2 make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/sgmm2' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/sgmm2' make -C nnet2 make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/nnet2' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/nnet2' make -C chain make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/chain' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/chain' make -C nnet3 make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/nnet3' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/nnet3' make -C ivector make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/ivector' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/ivector' make -C online2 make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/online2' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/xiaofeng/work/kaldi/src/online2' make -C bin make[1]: Entering directory '/home/xiaofeng/work/kaldi/src/bin' g++ -rdynamic -Wl,-rpath=/home/xiaofeng/work/kaldi/tools/openfst/lib -Wl,-rpath=/home/xiaofeng/work/kaldi/tools/eesen/lib align-equal.o ../decoder/kaldi-decoder.a ../lat/kaldi-lat.a ../lm/kaldi-lm.a ../fstext/kaldi-fstext.a ../hmm/kaldi-hmm.a ../transform/kaldi-transform.a ../gmm/kaldi-gmm.a ../tree/kaldi-tree.a ../util/kaldi-util.a ../thread/kaldi-thread.a ../matrix/kaldi-matrix.a ../base/kaldi-base.a -L/home/xiaofeng/work/kaldi/tools/openfst/lib -lfst /usr/lib/libatlas.so.3 /usr/lib/libf77blas.so.3 /usr/lib/libcblas.so.3 /usr/lib/liblapack_atlas.so.3 -L/home/xiaofeng/work/kaldi/tools/eesen/lib -leesen -lm -lpthread -ldl -o align-equal /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaGetDevice' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocublasDscal' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cublasShutdown' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocublasDaxpy' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaMallocPitch' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaThreadSynchronize' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaMemcpy2D' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to__cudaUnregisterFatBinary' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cublasSaxpy' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to__cudaInitModule' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaRegisterFatBinary' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocublasGetError' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaMemset2D' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaGetLastError' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaMalloc' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaMemcpy' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaRegisterVar' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tofst::ReverseProperties(unsigned long, bool)' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cublasSgemv' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocublasDgemm' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaGetDeviceProperties' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tofst::internal::DenseSymbolMap::~DenseSymbolMap()' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cublasSgemm' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocublasDgemv' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaMemset' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocublasSscal' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaConfigureCall' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaThreadExit' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
fst::internal::DenseSymbolMap::DenseSymbolMap()' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaMemcpyToSymbol' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaSetDevice' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaMemcpyFromSymbol' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaLaunch' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaGetErrorString' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cublasInit' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaGetDeviceCount' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
__cudaRegisterFunction' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference tocudaFree' /home/xiaofeng/work/kaldi/tools/eesen/lib/libeesen.so: undefined reference to
cudaSetupArgument' collect2: error: ld returned 1 exit status