dependensi lib dan urutannya

terkadang jika kita tidak mencantumkan lib dalam urutan tertentu di dalam makefile, itu gagal.

Alasannya adalah - definisi harus didahulukan sebelum penggunaannya.

Bagaimana cara menentukan urutan yang benar?


person hari    schedule 12.04.2011    source sumber


Jawaban (2)


Sebenarnya, ketika menghubungkan perpustakaan, penggunaannya harus didahulukan sebelum definisi. Setiap simbol yang belum terselesaikan perlu diketahui sebelum file perpustakaan yang menyediakan definisinya diproses.

Apa pun pesanannya, saya khawatir Anda harus melakukannya secara manual. Jika libA bergantung pada libB (yaitu libA menggunakan simbol dari libB), maka Anda harus menautkan dalam urutan ini: -lA -lB.

Ini sebagian besar merupakan masalah dokumentasi. Pustaka yang terdokumentasi dengan jelas menyatakan dengan jelas perpustakaan lain mana yang bergantung padanya, sehingga Anda dapat mengetahui urutan penautan yang benar.

Jika Anda tidak ingin membaca dokumentasi atau tidak ada dokumentasi yang tersedia, trial and error selalu menjadi pilihan :)

person Petri Lehtinen    schedule 12.04.2011
comment
Terima kasih. Inilah yang ingin saya pastikan bahwa tidak ada keajaiban yang memberi tahu Anda tentang hal itu. - person hari; 13.04.2011

Menurutku ini juga menjengkelkan. Saya ingat mencari alat untuk melakukan penyortiran untuk saya, tetapi tidak menemukan apa pun yang dapat membantu.

Akhirnya saya memutuskan untuk menggunakan pendekatan brute force: Jika Anda ingin mencantumkan semua lib Anda dua kali, mis. -lA -lB -lA -lB, ini akan menjamin bahwa setiap perpustakaan terdaftar sebelum (dan sesudah) setiap perpustakaan lainnya.

Jadi jika diberi $(LIST) perpustakaan, Anda dapat menggunakan $(addprefix -l,$(LIST) $(LIST)).

Tidak terlalu elegan, dan agak memperlambat tahap penautan, tetapi berhasil.

person Chen Levy    schedule 12.04.2011
comment
Hummm, terima kasih tapi saya tahu pendekatan ini yang bisa menjadi JELEK jika Anda memiliki 15 lib :D - person hari; 13.04.2011
comment
@hari: Anda dapat menggunakan opsi --start-group dan --end-group (atau -( dan -)) di sekitar daftar perpustakaan, untuk menghindari pengulangan. Namun, menurut panduan binutils, hal ini memerlukan biaya kinerja yang signifikan. - person eriktous; 13.04.2011
comment
@eriktous: ya, pada akhirnya seseorang harus memastikan bahwa pengulangan tidak terjadi. - person hari; 14.04.2011