Tôi đang làm việc trên một bản vá cho FFmpeg và cần phải gỡ lỗi mã của tôi. Tôi đang tải một thư viện bên ngoài, và để kiểm tra các phiên bản thư viện khác nhau, tôi có chúng trong các thư mục khác nhau. Để chọn cái nào tôi muốn sử dụng, tôi đã sử dụng DYLD_LIBRARY_PATH=/path/to/lib/dir ./ffmpeg
và hoạt động không sao. Nhưng khi tôi thử trong phạm vi lldb
, sự cố xảy ra là dyld: Library not loaded
và Reason: image not found
. Điều này được sử dụng để làm việc trước Xcode 7.1, nhưng tôi vừa mới nâng cấp và nó ngừng hoạt động.Tại sao lldb không chuyển tiếp biến môi trường của tôi nữa?
Dưới đây là MVCE tôi:
#include <stdio.h>
#include <stdlib.h>
int main() {
char* str = getenv("DYLD_LIBRARY_PATH");
if (str) puts(str);
else puts("(null)");
return 0;
}
Chạy chương trình này như sau sẽ cho kết quả:
$ ./a.out
(null)
$ DYLD_LIBRARY_PATH=/tmp ./a.out
/tmp
Điều đó có vẻ ổn. Nhưng khi tôi cố gắng sử dụng LLĐB nó không thành công:
$ DYLD_LIBRARY_PATH=/tmp lldb ./a.out
(lldb) target create "./a.out"
Current executable set to './a.out' (x86_64).
(lldb) run
Process 54255 launched: './a.out' (x86_64)
(null)
Process 54255 exited with status = 0 (0x00000000)
Đang cố gắng để thiết lập các biến môi trường bên trong LLĐB hoạt động:
lldb ./a.out
(lldb) target create "./a.out"
Current executable set to './a.out' (x86_64).
(lldb) env DYLD_LIBRARY_PATH=/tmp
(lldb) run
Process 54331 launched: './a.out' (x86_64)
/tmp
Process 54331 exited with status = 0 (0x00000000)
phiên bản LLĐB (đó là từ Xcode 7.1):
$ lldb --version
lldb-340.4.110
Câu hỏi: Đây có phải là một "tính năng mới" có ý định hay là một lỗi mới trong lldb (hoặc tôi hoàn toàn điên rồ và điều này không bao giờ được sử dụng để hoạt động)? Tôi khá lldb tích cực được sử dụng để chuyển tiếp các biến môi trường DYLD_LIBRARY_PATH
, do đó, làm thế nào đến nó không còn nữa?
Chỉnh sửa: Đây là trên OS X 10.11.1.
Đã xác nhận [tại đây] (https://www.mail-archive.com/[email protected]/msg00779.html) bởi Jason Molenda (người có vẻ là một trong những nhà phát triển lldb). –