is there a way to combine constant memory and separate compilation. Seemingly, according to my interpretation of the programming guide, you can not pass pointers obtained for constant memory on/ by the device, to the host, nor pointers for constant memory obtained for constant memory obtained by the host, to the device (programming guide: E.2.3. Pointers) - i.e. direct memory copies of pointers.
Would you be able to use a function that obtains the constant memory addresses via cudaGetSymbolAddress and pass it to other functions and program files via a structure? The function is made to reside in the source file where the constants are used in device kernels, obtains the constant addresses via cudaGetSymbolAddress and shares this with application functions residing in other source files via a structure.