Untuk kenyamanan saya menambahkan halaman manual yang relevan di bawah ini.
Pemahaman (salah) saya yang pertama: Jika saya perlu memisahkan opsi ,
, itu berarti yang kedua -Wl
bukan opsi lain karena ia datang sebelumnya ,
yang berarti ini adalah argumen untuk -rpath
opsi.
Saya tidak mengerti bagaimana -rpath
bisa -Wl,.
berdebat!
Apa yang masuk akal di benak saya adalah ini:
-Wl,-rpath .
Ini harus memanggil opsi -rpath linker dengan argumen direktori saat ini.
man gcc:
-Wl, opsi
Lulus opsi sebagai opsi ke tautan. Jika opsi berisi koma, itu dibagi menjadi beberapa opsi di koma. Anda dapat menggunakan sintaks ini untuk meneruskan argumen ke opsi. Misalnya,
-Wl,-Map,output.map
beralih-Map output.map
ke tautan. Saat menggunakan penghubung GNU, Anda juga bisa mendapatkan efek yang sama dengan `-Wl, -Map = output.map '.
man ld:
-rpath = dir
Tambahkan direktori ke jalur pencarian perpustakaan runtime. Ini digunakan saat menghubungkan ELF yang dapat dieksekusi dengan objek bersama. Semua -rpath argumen disatukan dan diteruskan ke linker runtime, yang menggunakannya untuk menemukan objek bersama saat runtime. Opsi -rpath juga digunakan ketika menemukan objek bersama yang dibutuhkan oleh objek bersama secara eksplisit termasuk dalam tautan;
Jawaban:
The
-Wl,xxx
pilihan untuk gcc melewati daftar dipisahkan koma token sebagai daftar dipisahkan dengan spasi dari argumen ke linker . Begituakhirnya menjadi panggilan tautan
Dalam kasus Anda, Anda ingin mengatakan "
ld -rpath .
", sehingga Anda meneruskannya ke gcc sebagai-Wl,-rpath,.
Alternatifnya, Anda dapat menentukan contoh berulang-Wl
:Perhatikan bahwa tidak ada koma antara
aaa
dan yang kedua-Wl
.Atau, dalam kasus Anda
-Wl,-rpath -Wl,.
,.sumber
-Wl,-rpath,.
atau Anda katakan-Wl,-rpath -Wl,.
. Salah satu dari keduanya, Anda tidak bisa menghilangkan apa pun.-Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib
?-Wl,-rpath,dir1,-rpath,dir2
, atau-Wl,-rpath=dir1,-rpath=dir2
.Anda juga bisa menulis
Untuk menyingkirkan ruang sial itu. Ini bisa dibilang lebih mudah dibaca daripada menambahkan koma tambahan (itulah yang diteruskan ke ld).
sumber
-Wl,option
: " Saat menggunakan penghubung GNU , Anda juga bisa mendapatkan efek yang sama dengan -Wl, -Map = output.map." Bagi saya, itu tampaknya menunjukkan bahwa jika Anda menggunakan tautan selain penghubung GNU,=
sintaksis mungkin tidak didukung.Satu hal lagi. Anda mungkin perlu menentukan opsi -L juga - misalnya
atau Anda mungkin berakhir dengan kesalahan seperti
sumber
Halaman manual membuatnya cukup jelas. Jika Anda ingin memberikan dua argumen (
-rpath
dan.
) ke tautan Anda dapat menulisatau sebagai alternatif
Argumen yang
-Wl,-rpath .
Anda sarankan TIDAK masuk akal bagi saya. Bagaimana gcc seharusnya tahu bahwa argumen kedua Anda (.
) seharusnya diteruskan ke tautan daripada ditafsirkan secara normal? Satu-satunya cara untuk mengetahui hal itu adalah jika ia memiliki pengetahuan orang dalam tentang semua argumen penghubung yang mungkin sehingga ia tahu bahwa-rpath
diperlukan argumen setelahnya.sumber