Adakah yang bisa memberi tahu saya cara membuat pustaka statis dari file .cpp dan .hpp? Apakah saya perlu membuat .o dan .a? Saya juga ingin tahu bagaimana saya bisa mengkompilasi perpustakaan statis dan menggunakannya dalam kode .cpp lainnya. Saya punya header.cpp
, header.hpp .
saya ingin membuatheader.a
. Uji header.a dalam test.cpp
. Saya menggunakan g ++ untuk kompilasi.
c++
gcc
compiler-construction
g++
linuxx
sumber
sumber
Jawaban:
Buat file .o:
tambahkan file ini ke perpustakaan, buat perpustakaan jika perlu:
gunakan perpustakaan:
sumber
a.out
format jadi ini sangat menyesatkan. Dan mengapa Anda "tidak pernah" membuat executable yang disebuttest
?test
adalah perintah sistem. Tetapi karena program uji biasanya tidak pernah diinstal di direktori bin sistem dan mengharuskan Anda untuk menulisnya,./test
itu juga bukan masalah bagi saya ...a.out
format, tetapi namanya tetap karena alasan lama. (Dan jika Anda sedang tidak mampu menggunakan shell dengan benar maka itu masalah Anda;. I untuk satu tahu bagaimana untuk menjalankan eksekusi dari direktori saattest
ini baik-baik saja untuk nama executable, selama Anda menulis semudah tes cepat potongan tentu saja.)test
adalah sesuatu yang telah saya pelajari dengan cara yang sulit untuk disesali dan saya "sangat mampu menggunakan shell". Itu ide yang buruk, dan saya telah melihatnya menggigit banyak orang lain yang "sangat mampu menggunakan cangkang".Anda dapat membuat
.a
file menggunakanar
utilitas, seperti:lib
adalah direktori yang berisi semua perpustakaan Anda. adalah praktik yang baik untuk mengatur kode Anda dengan cara ini dan memisahkan kode dan file objek. Memiliki semua dalam satu direktori biasanya terlihat jelek. Baris di atas dibuatlibHeader.a
di direktorilib
. Jadi, di direktori Anda saat ini, lakukan:Kemudian jalankan
ar
perintah di atas .Saat menautkan semua perpustakaan, Anda dapat melakukannya seperti ini:
The
-L
bendera akan mendapatkang++
untuk menambahkanlib/
direktori ke jalan. Dengan cara ini,g++
mengetahui direktori apa yang harus dicari saat mencarilibHeader
.-llibHeader
menandai perpustakaan tertentu untuk ditautkan.dimana test.o dibuat seperti ini:
sumber
-lHeader
bukan-llibHeader
?Iya.
Buat .o (seperti biasa):
Buat arsip :
Tes :
Perhatikan bahwa sepertinya tidak ada gunanya membuat arsip dengan hanya satu modul di dalamnya. Anda bisa dengan mudah menulis:
Namun, saya akan memberi Anda keuntungan dari keraguan bahwa kasus penggunaan Anda yang sebenarnya sedikit lebih kompleks, dengan lebih banyak modul.
Semoga ini membantu!
sumber
ranlib
yang mana dalam GNU berartiar s
.