Tôi có một tệp thực thi ngầm tải một số thư viện .so, tất cả chúng được xây dựng bởi tôi. Cho việc triển khai, hoặc ít nhất là thử nghiệm/gỡ lỗi, tôi muốn có tất cả trong cùng một thư mục:Làm thế nào để mã hóa vị trí thực thi trong một đường dẫn Linux?
my_executable
libmylib1.so
libmylib2.so
Để có được thực thi để tải các thư viện ngầm, tôi muốn thiết lập một rPath (DT_RUNPATH) cho thư mục thực thi. Với OS X, tôi muốn làm điều này như sau:
clang -dynamiclib -o libmylib1.dylib -install_name @rpath/libmylib1.dylib src1.c src2.c
clang -dynamiclib -o libmylib2.dylib -install_name @rpath/libmylib2.dylib src3.c src4.c
clang -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath,@loader_path/. main.c
Thông báo các @loader_path/.
hình thành rPath của thực thi trong OS X. Với Linux, gần nhất tôi có thể đến đây là
gcc -dynamiclib -o libmylib1.so src1.c src2.c
gcc -dynamiclib -o libmylib2.so src3.c src4.c
gcc -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath=. main.c
Các vấn đề ở đây là trên Linux, rpath theo sau thư mục làm việc hiện tại, chứ không phải thư mục thực thi. Có cách nào để hoàn thành điều tương tự trên Linux không?
Đó là nó! Cảm ơn bạn. –