14.04.01 32-bit: Brak g-64 64-bitowych plików dołączanych podczas kompilacji krzyżowej

8

Mam więc zainstalowany 32-bitowy Xubuntu 14.04.1. Mamy kod interfejsu, w którym zamierzamy wydać SO dla różnych platform, które obsługujemy, i biblioteki DLL Windows. (Tak, wiem, wydanie binarne jest złe, ale również tutaj nie dotyczy.)

Próbuję zbudować 32-bitowe i 64-bitowe SO z 32-bitowym 14.04.01, używając argumentów -m32/ -m64gcc / g ++. Wersja 32-bitowa działa dobrze, ale wersja 64-bitowa kończy się niepowodzeniem

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

Po sprawdzeniu załączników plik ten jest rzeczywiście obecny w wersji 32-bitowej, ale brakuje go w wersji 64-bitowej.

Googlując problem, wydaje się, że zdarzyło się to w przeszłości dla GCC / G ++ 4.6, ale potem jest oznaczone jako naprawione. Ale 14.04.1 używa GCC / G ++ 4.8, co sugeruje regresję w tych bibliotekach w GCC / G ++ 4.8. Czy to coś, co widział ktoś inny?

W razie potrzeby mógłbym skonfigurować nową maszynę wirtualną dla 64-bitowego 14.04.1 i sprawdzić, czy wybrałoby to odpowiednie wersje bibliotek. Raczej nie, jeśli to możliwe, ponieważ mam wiele innych rzeczy, które musiałbym również zainstalować ponownie. Czy jest lepsze rozwiązanie? A jeśli zainstalowałbym 64-bitowy 14.04.1, czy na pewno byłbym w stanie przeprowadzić kompilację krzyżową z powrotem do 32-bitowej bez utraty nagłówków w innym kierunku?

Graham
źródło
... być może powinieneś unikać wspominania rzeczy, które nie są tutaj istotne, ponieważ nie są istotne.
mikewhthing
2
Czy zainstalowałeś g++-multilibpakiet?
steeldriver,
@steeldriver Dzięki - to było to! Wygląda na to, że instalacja 64-bitowa ma ją domyślnie, ale instalacja 32-bitowa nie. OK, coś jeszcze do dodania do mojej listy kontrolnej „jak skonfigurować maszynę Wirtualną kompilacji systemu Linux”. :) Może się to wydawać podstawowe, ale nie znalazłem tego jako odpowiedzi na pytania innych osób dotyczące tego samego błędu kompilacji, a tak naprawdę nie jestem ekspertem od Linuksa.
Graham

Odpowiedzi:

9

64-bitowy plik config.h bits / c ++ jest dostarczany w systemach 32-bitowych (i odwrotnie) przez zainstalowanie g++-multilibpakietu, więc musisz zainstalować ten pakiet albo za pomocą Software Center, Synaptic, lub za pomocą terminala za pomocą

sudo apt-get install g++-multilib

Jest to tylko pakiet zależności, który rozwiązuje się g++-4.8-multilibw przypadku domyślnej wersji gcc / g ++, a z kolei zależy od lib64stdc++-4.8-dev(kompilacji 64-bitowej w wersji 32-bitowej) lub libx32stdc++-4.8-dev(kompilacji 32-bitowej w wersji 64-bitowej) - to one zawierają aktualne pliki nagłówkowe.

Istnieje odpowiednik zestawu pakietów prostym kompilatora gcc.

steeldriver
źródło
4
sudo apt-get install g++-5-multilibdostałem wersję, której potrzebowałem. Jeśli to nie zadziała, uwaga sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get updatejest również częścią mojej konfiguracji.
U007D,