Không thể đặt DYLD_FALLBACK_LIBRARY_PATH trong shell trên OSX 10.11.1


11

Trong các tập lệnh shell được sử dụng để kiểm tra đơn vị với các thư viện động trong một thư mục khác với @rpath thông thường, trước đây tôi đã có thể đặt DYLD_FALLBACK_LIBRARY_PATH để đặt thư mục chứa các thư viện. Theo 10.11.1, bash dường như bỏ qua các nỗ lực để đặt biến môi trường này:

$ sh -x testscript.sh
+ DYLD_FALLBACK_LIBRARY_PATH=/Users/something/testinglibs
+ export DYLD_FALLBACK_LIBRARY_PATH
+ exec printenv

và DYLD_FALLBACK_LIBRARY_PATH không có trong đầu ra của printenv.

Đây có phải là một hack liên quan đến bảo mật trong vỏ 10.11 không? Tôi chưa thể tìm thấy sự thay đổi này được ghi lại trong các trang hướng dẫn hoặc trực tuyến.


Sẽ các install_name_tool giúp đỡ?
Saaru Lindestøkke

Chắc chắn, install_name_tool là một giải pháp lâu dài (và tôi thực sự đã viết kịch bản để thiết lập môi trường xây dựng). Để kiểm tra nhanh và gỡ lỗi trong môi trường phát triển, thật rắc rối khi phải tạo các bản sao tạm thời của thư viện, hack các thay đổi @rpath và sau đó có thể quên đi thay đổi thủ công. DYLD_FALLBACK_LIBRARY_PATH và DYLD_LIBRARY_PATH rất tiện cho các chu kỳ thử nghiệm / phát triển không thường xuyên này.
Guy

Câu trả lời:


8

Đây là Bảo vệ toàn vẹn hệ thống được giới thiệu trong El Capitan

Tài liệu là trong này từ Apple

Về cơ bản, mọi thực thi OS X do Apple cung cấp đều được bảo vệ. và (từ một tài liệu trước đó)

Sinh ra các quy trình con của các quy trình bị hạn chế bởi Bảo vệ toàn vẹn hệ thống, chẳng hạn như bằng cách khởi chạy quy trình trợ giúp trong gói với NSTask hoặc gọi lệnh exec (2), đặt lại các cổng Mach đặc biệt của quy trình con đó. Bất kỳ biến môi trường liên kết động (dyld) nào, chẳng hạn như DYLD_LIBRARY_PATH, sẽ bị xóa khi khởi chạy các quy trình được bảo vệ.

Trong trường hợp này sh được bảo vệ


Cảm ơn con trỏ! Tôi đã tập trung vào kernel và các bảo vệ hệ thống tập tin khác trong SIP. Không nhận thấy sự thay đổi này.
Guy

2
Ok, điều này giải thích nguồn gốc của hiện tượng, nhưng làm thế nào bây giờ chúng ta phải kiểm tra các thư viện không được cài đặt? Ý tôi là, làm thế nào chúng ta có thể viết make checktrên El Capitan khi cần chia sẻ libs?
akim

Hầu hết thực hiện thông qua autoconf nên kết thúc bằng / usr / local vẫn có thể ghi được - nếu họ cố gắng ở bất kỳ nơi nào khác dưới / usr, tôi sẽ đặt câu hỏi về kiến ​​thức của tác giả về OS X (hoặc Unix)
user151019

Nếu bất cứ ai tìm thấy điều này sau khi lãng phí thời gian cố gắng hiểu lý do tại sao các vars môi trường dyld biến mất, hãy xem xét việc gửi một lỗi với Apple để khiến họ ghi lại tương tác dyld / SIP. Tôi đã làm rồi, và lỗi đã nhận được số thứ tự: // 30755019. (Tôi hy vọng rằng sau đó họ sẽ nghĩ đến việc ghi lại những cái bẫy như vậy ...)
hmijail thương tiếc những người từ chức

1
(Tôi có nghĩa là tài liệu về sự tương tác SIP trong trang web dyld, mà trong bài viết này hoàn toàn là về mẹ)
hmijail thương tiếc những người từ chức
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.