Using textures in cuda when kernel code is in PTX file

I am having trouble getting texture read to work using cuda9 on Ubuntu.
My program reads a ptx file containing all the kernel modules.Then I defined

texture<uchar4, 2, cudaReadModeNormalizedFloat> texImage

and initialized it(such as cudaBindTextureToArray(texImage, a_Src);). When I use cuLaunchKernel to start the kernel, the value of

tex2D(texImage, x, y);

function is always 0, but the normal <<<>>> method can get correct value,why?

Would passing a cuda texture object into the kernel be a suitable alternative? The texture object APIs are described here:

https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__TEXTURE__OBJECT.html

You could also look into the .cpp code that the nvcc compiler generates as intermediate code (with the -keep) option, to see what kind of initialization the code makes when you call a kernel via <<< >>> syntax. There is a lot of things going on behind the scenes that is normally hidden from the programmer.