Câu hỏi này liên quan đến this one cũng như câu trả lời của nó.Trộn các đối tượng PIC và không phải PIC trong một thư viện chia sẻ
Tôi vừa phát hiện ra một số sự xấu xí trong bản dựng mà tôi đang nghiên cứu. Tình hình trông giống như sau (được viết bằng định dạng gmake); lưu ý, điều này đặc biệt áp dụng đối với một mô hình bộ nhớ 32-bit trên sparc và x86 phần cứng:
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 ${@} ${^}
Rõ ràng nó có thể làm việc để trộn đối tượng biên soạn có và không có PIC trong một đối tượng chia sẻ (điều này đã được sử dụng trong nhiều năm qua) . Tôi không biết đủ về PIC để biết liệu đó có phải là một ý tưởng hay hay không, và tôi đoán là trong trường hợp này nó không cần thiết, nhưng thay vào đó nó xảy ra vì ai đó không quan tâm đủ để tìm ra cách đúng đắn để làm điều đó khi tacking về công cụ mới để xây dựng.
Câu hỏi của tôi là:
- là an toàn
- Đây có phải là một ý tưởng tốt
- gì vấn đề tiềm ẩn có thể xảy ra như là kết quả
- Nếu tôi chuyển đổi tất cả mọi thứ để PIC, được có bất kỳ phi - những thứ mà tôi có thể muốn xem.