There's (at least) two different types of normalmaps you can use, world-space and tangent-space.
With world-space normalmaps the normals are already pointing in the right direction. On the back-side of a cube the normals are pointing backwards, on the front side they point forward. This means that every face on the cube needs to be mapped uniquely, faces can't share the same uv-space on the normalmap, unless the face orientation is the same. This can be a disadvantage (with tangent-space normals you could share uv space), but often you want a unique texture for all faces anyway, like when the cube has a scar on one side, but not the other.
World-space normalmaps are easier to program, and should be slightly more efficient, because you don't need to rotate the normals, to align them with the surface of the mesh. Your mesh doesn't even need to contain normals at all, if you do the lighting calculations in the pixel shader. You only need to rotate the normalmap normals with the main world rotation matrix of the object. That's one matrix multiplication per pixel, not a big problem nowadays. If your mesh doesn't need to rotate at all, this method will be very fast, because you can use the normals directly, without any extra rotations.
In tangent-space the normals in the normalmap are relative to the vertex normal and bi-normal they belong to. They need to be rotated first, to align them with the mesh surface orientation. That's a little bit of extra work, but it allows you to share texture space between faces of different orientation, but maybe more important, it will work on deformable meshs, like skinned characters.
To build the surface-alignment rotation matrix you just combine the vertex normal, the vertex bi-normal, and their cross product into a float3x3. You can do that in the vertex shader, and pass the matrix on to the pixel shader. You probably want to incorporate the object rotation matrix as well, that way you only need one matrix multiplication in the pixel shader. It shouldn't be too complicated, your mesh just needs to have those bi-normals.
Whichever method you use, you need to have the right type of normalmap. Tangent-space normalmaps are usually mostly purple, because the normals tend to face in a forward direction only. World-space normalmaps tend to use a larger color space, as the normals can point in all directions.
Wouldn't that make the lighting dependent on the camera position?