Этот вопрос связан с этим , а также с ответом на него.
Я только что открыл допустил некоторую уродливость в сборке, над которой я работаю. Ситуация выглядит примерно так (написано в формате gmake); обратите внимание, это особенно относится к 32-битной модели памяти на оборудовании sparc и 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 ${@} ${^}
Очевидно, что он может работать для смешивания объектов, скомпилированных с PIC и без него, в общем объекте (это использовалось в течение многих лет). Я недостаточно знаю о PIC, чтобы понять, является ли это хорошей идеей / умной, и я предполагаю, что в данном случае это не нужно, а скорее это происходит, потому что кто-то не позаботился о том, чтобы найти правильный способ сделать это при лавировании на новые вещи в сборку.
Мой вопрос: