この質問は、この質問とその回答に関連しています。
作業中のビルドに醜さを発見しました。状況は次のようになります (gmake 形式で記述)。これは、特に sparc および x86 ハードウェアの 32 ビット メモリ モデルに適用されることに注意してください。
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 について、それが良いアイデアであるかスマートであるかを判断するのに十分な知識がありません。私の推測では、この場合は必要ではなく、むしろ誰かがタッキング時に正しい方法を見つけることに十分に関心を持っていなかったために起こっているのです。ビルドの新しいものについて。
私の質問は:
- これは安全ですか
- それは良い考えですか
- その結果、どのような潜在的な問題が発生する可能性がありますか
- すべてを PIC に切り替えた場合、注意が必要な明らかでない落とし穴はありますか。