Mezclar objetos PIC y no PIC en una biblioteca compartida

Esta pregunta está relacionada conést así como su respuesta.

Acabo de descubrir algo de fealdad en una construcción en la que estoy trabajando. La situación se parece a la siguiente (escrita en formato gmake); tenga en cuenta que esto se aplica específicamente a un modelo de memoria de 32 bits en hardware sparc y x86:

OBJ_SET1  := some objects
OBJ_SET2  := some objects

# note: OBJ_SET2 doesn't get this flag
${OBJ_SET1} : CCFLAGS += -PIC

${OBJ_SET1} ${OBJ_SET2} : %.o : %.cc
  ${CCC} ${CCFLAGS} -m32 -o ${@} -c ${<}

obj1.o       : ${OBJ_SET1}
obj2.o       : ${OBJ_SET2}
sharedlib.so : obj1.o obj2.o
obj1.o obj2.o sharedlib.so :
  ${LINK} ${LDFLAGS} -m32 -PIC -o ${@} ${^}

Claramente puede funcionar mezclar objetos compilados con y sin PIC en un objeto compartido (esto ha estado en uso durante años). No sé lo suficiente sobre PIC para saber si es una buena idea / inteligente, y supongo que en este caso no es necesario, sino que está sucediendo porque a alguien no le importó lo suficiente como para descubrir la forma correcta de hacerlo al virar en cosas nuevas para la compilación.

Mi pregunta es

Es seguroEs una buena ideQué problemas potenciales pueden ocurrir como resultadoSi cambio todo a PIC, ¿hay algunas trampas no obvias que me gustaría tener en cuenta?

Respuestas a la pregunta(2)

Su respuesta a la pregunta