W Linuksie próbuję skompilować coś, co używa opcji -fwritable-string. Podobno jest to opcja gcc, która nie działa w nowszej wersji gcc. Zainstalowałem gcc-3.4 w moim systemie, ale myślę, że ta nowsza wersja jest nadal używana, ponieważ wciąż dostaję błąd, który mówi, że nie rozpoznaje opcji wiersza poleceń -fwritable-stringi. Jak mogę uzyskać dostęp do starszej wersji gcc?Jak używać starszej wersji gcc w Linuksie
Odpowiedz
Jeśli możesz znaleźć miejsce, w którym faktycznie są używane łańcuchy zapisu, inną możliwością byłoby użycie strdup i free w podzbiorze literałów, które kod faktycznie edytuje. Może to być bardziej skomplikowane niż obniżanie wersji GCC, ale sprawi, że kod będzie dużo bardziej przenośny.
Edit
W odpowiedzi na wyjaśnienie pytanie/komentarz poniżej, jeśli widziałeś coś takiego:
char* str = "XXX";
str[1] = 'Y';
str[2] = 'Z';
// ... use of str ...
Można by zastąpić wyżej z czymś takim:
char* str = strdup("XXX");
str[1] = 'Y';
str[2] = 'Z';
// ... use of str ...
free(str);
i gdzie poprzednio:
char* str = "Some string that isn't modified";
Można by wymienić powyżej:
const char* str = "Some string that isn't modified";
Zakładając, że dokonał tych poprawek „-fwritable-strings” nie będzie już konieczne.
Może po prostu dać całą ścieżkę gcc-3.4 zainstalować podczas kompilacji programu: /path_to_gcc_3.4/gcc your_program
To nie jest mój program. Używam make. –
Spróbuj dodać tę linię do pliku Makefile: CC =/path_to_gcc_3.4/gcc –
powiedzieć nic o systemie budować w użyciu, ale zazwyczaj stare wersje gcc można powoływać się wprost, przez coś podobnego (to jest na budowie autotools-based):
./configure CXX=g++-3.4 CC=gcc-3.4
dla systemu opartego na produkcji Producent, czasem to będzie działać:
make CXX=g++-3.4 CC=gcc-3.4
Większość plików Makefile powinna rozpoznawać przesłanianie CC
i CXX
w ten sposób.
Nie sądzę, że to zadziała, ponieważ plik konfiguracyjny to tylko kilka instrukcji i nic nie robi. –
Cóż, prawdopodobnie nie jest zbudowany z autotools. Jeśli dasz nam więcej szczegółów, będziemy w stanie Ci pomóc. –
Ten facet prawdopodobnie zostanie trafiony kilka razy w przyszłym roku jako najnowsze uaktualnienie do wersji Ubuntu 11.04 i gcc-4.5.2 z gcc. Musiałem to zrobić, aby skompilować gst-ffmpeg. Musiałem coś zrobić. ./configure --prefix =/usr CC = gcc-4.4. Aby ułatwić wyszukiwanie, znajdź ten link. tutaj jest błąd kompilatora: –
Jeśli edycja pliku konfiguracyjnego/Makefile nie jest możliwa, system Linux zawiera narzędzie o nazwie update-alternatives
w takich sytuacjach. Jednak korzystanie z niego jest bardzo trudne (linki do różnych samouczków zamieszczonych poniżej).
To jest trochę prostsza - oto skrypt (z here), aby łatwo przełączać domyślnego gcc
/g++
wersja:
#!/bin/bash
usage() {
echo
echo Sets the default version of gcc, g++, etc
echo Usage:
echo
echo " gcc-set-default-version <VERSION>"
echo
exit
}
cd /usr/bin
if [ -z $1 ] ; then
usage;
fi
set_default() {
if [ -e "$1-$2" ] ; then
echo $1-$2 is now the default
ln -sf $1-$2 $1
else
echo $1-$2 is not installed
fi
}
for i in gcc cpp g++ gcov gccbug ; do
set_default $i $1
done
Jeśli 1) Nazwa skrypt switch-gcc
, 2) umieścić go na swojej drodze oraz 3) sprawiają, że plik wykonywalny (chmod +x switch-gcc
) można następnie przełączać wersje kompilatora prostu uruchamiając
sudo switch-gcc 3.2
Dalsze ponownego ading na update-alternatives
:
- 1. Instalacja starszej wersji gcc
- 2. Jak uruchomić aplikację w starszej wersji symulatora?
- 3. Utwórz nowy projekt w szynach starszej wersji
- 4. Instalacja starszej wersji ImageMagick z homebrew
- 5. Jak powrócić do starszej wersji naszego kodu w Subversion?
- 6. Jak uzyskać kopię starszej wersji pliku w repozytorium git?
- 7. jak używać awesomium sdk w Linuksie
- 8. Jak mogę uzyskać właściwość starszej wersji węzła na poziomie jackrabbit?
- 9. Jak dostosować system Android GridLayout do starszej wersji?
- 10. Zainstaluj gcc na Linuksie bez uprawnień administratora
- 11. Docker: co jest odpowiednikiem starszej wersji - parametr połączenia
- 12. MinGW - Zaktualizuj GCC w wersji 3.4.5 do wersji 4.4
- 13. Jak używać niestandardowej wersji sbt w intellij idea 14?
- 14. Jak używać konkretnej wersji CocoaPods
- 15. Brzytwa MVC3: czy możliwe jest odtworzenie starszej wersji ASCX?
- 16. Git rozgałęzia się ze starszej wersji i cofa bieżącą gałąź.
- 17. jak używać mojej własnej biblioteki dynamicznej w Linuksie (Makefile)
- 18. Łączenie plików obiektów zbudowanych przy użyciu różnych wersji GCC
- 19. Jak używać najnowszego GCC z Xcode 5?
- 20. Przywracanie zrzutu bazy danych starszej wersji Mongo do nowej wersji Mongo
- 21. Nie można użyć starszej wersji git-lfs na reporze utworzonej przy użyciu najnowszej wersji
- 22. Jakikolwiek sposób w CMake wymagać GCC w wersji 4+?
- 23. Jak używać różnych wersji ghc ze stosu?
- 24. Jak wymusić Rails używać klejnot wersji X
- 25. Używanie biblioteki Scala, która jest dostępna tylko dla starszej wersji Scala
- 26. Jak utworzyć link do nowej wersji gcc z naparami?
- 27. Jak zrobić jar w Linuksie?
- 28. jak włączyć cutil.h w Linuksie
- 29. Uzyskaj nazwę użytkownika systemu Windows w starszej wersji (nie w rozszerzeniach WebExtensions)
- 30. Mam 2 wersje Pythona zainstalowane, ale cmake używa starszej wersji. Jak zmusić cmake do korzystania z nowszej wersji?
Jak to działa? Czy możesz dać przykład? –