14.04.01 32-bit: Hilang g ++ 64-bit menyertakan file saat kompilasi silang

8

Jadi, saya sudah menginstal 32-bit Xubuntu 14.04.1. Kami memiliki beberapa kode antarmuka tempat kami bermaksud merilis SO untuk berbagai platform yang kami dukung, dan Windows DLL. (Ya saya tahu, rilis biner buruk, tetapi juga tidak relevan di sini.)

Saya mencoba untuk membangun SO 32-bit dan 64-bit dengan 32-bit 14.04.01, menggunakan argumen -m32/ -m64gcc / g ++. Versi 32-bit berfungsi dengan baik, tetapi versi 64-bit gagal

/usr/include/c++/4.8/string:38:28: fatal error: bits/c++config.h: No such file or directory

Memeriksa di termasuk, file itu benar-benar ada untuk 32-bit tetapi hilang untuk 64-bit.

Googling masalah, ini tampaknya telah terjadi di masa lalu untuk GCC / G ++ 4.6, tetapi kemudian ditandai sebagai diperbaiki. Tapi 14.04.1 menggunakan GCC / G ++ 4.8, yang menunjukkan ada regresi di perpustakaan tersebut di GCC / G ++ 4.8. Apakah ini sesuatu yang dilihat orang lain?

Saya bisa mengatur VM baru untuk 64-bit 14.04.1 jika perlu dan melihat apakah itu akan mengambil versi perpustakaan yang tepat. Saya lebih suka tidak jika memungkinkan, karena saya punya banyak hal lain yang harus saya instal ulang juga. Apakah ada solusi yang lebih baik? Dan jika saya menginstal 64-bit 14.04.1, apakah saya dapat melakukan kompilasi silang kembali ke 32-bit tanpa ada header yang hilang di arah yang lain?

Graham
sumber
... mungkin Anda harus menghindari menyebutkan hal-hal yang "tidak relevan di sini", karena tidak relevan.
mikewhever
2
Apakah Anda menginstal g++-multilibpaket?
steeldriver
@steeldriver Terima kasih - itu dia! Sepertinya instal 64-bit memilikinya secara default, tetapi instal 32-bit tidak. OK, sesuatu yang lain untuk ditambahkan ke daftar periksa "cara mengatur Linux build VM" saya. :) Mungkin terlihat mendasar, tetapi saya tidak melihat ini sebagai jawaban dalam pertanyaan orang lain untuk kesalahan kompilasi yang sama, dan saya bukan benar-benar ahli Linux.
Graham

Jawaban:

9

File config.h 64-bit bits / c ++ disediakan pada sistem 32-bit (dan sebaliknya) dengan menginstal g++-multilibpaket, jadi Anda perlu menginstal paket itu baik menggunakan Software Center, Synaptic, atau melalui terminal menggunakan

sudo apt-get install g++-multilib

Ini hanya paket dependensi yang diselesaikan g++-4.8-multilibuntuk versi gcc / g ++ default, dan pada gilirannya tergantung pada lib64stdc++-4.8-dev(kompilasi 64-bit pada 32-bit) atau libx32stdc++-4.8-dev(kompilasi 32-bit pada 64-bit) - ini adalah yang berisi file header yang sebenarnya.

Ada satu set paket yang setara untuk kompiler C biasa gcc.

Steeldriver
sumber
4
sudo apt-get install g++-5-multilibmendapatkan saya versi yang saya butuhkan. Jika ini tidak berhasil untuk Anda, perhatikan sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get updatejuga bagian dari konfigurasi saya.
U007D