You can potentially structure your project so that each developer can only see the "released" or snapshots of interface files, (depending on the language(s) in use), and the binary builds of the other components that match the version of those but there is no specific software that I know of to manage this.
Git, mercurial & Subversion can all support this way of working, probably other VCS systems can do as well, via the Access Control methods but it is primarily a structuring issue.
For C/C++ you would have, available to each developer, something such as:
-- Project_Dir
|- Libraries & their includes
|- Public-Interfaces (.h/.hpp files)
|- Built_Components (.obj & .lib files) preferably mapped to a shared folder rather than in VCS
|- Current_Dev_Component
This is actually quite a common pattern where different tools are needed to build different components or even just for speed of building.
However, if you really don't trust your developers not to steal the code then, presumably, you also don't trust them to not include time-bombs, viruses, etc. so either need to get different developers or move into a different industry.