Skonfigurowałem CDT dla eclipse i napisałem prosty program hello world w C:
#include <stdio.h>
int main(void){
puts("Hello, world.");
return 0;
}
Program buduje się i działa poprawnie, ale zaćmienie wciąż wyświetla ten żółty znak zapytania obok wyrażenia włączenia, które mówi, "Unresolved inclusion: <stdio.h>"
kiedy najeżdżam na niego myszą.
Nie wpływa to na działanie programu, ale jest raczej denerwujące.
Czy ktoś ma pomysł, jak to usunąć?
c
eclipse
eclipse-cdt
standard-library
Derrick Zhang
źródło
źródło
Odpowiedzi:
Kompilator używany przez Eclipse jest w stanie poprawnie rozwiązać symbole, więc kod będzie dobrze się skompilował.
Ale uzupełnianie kodu / indeksator lub preprocesor używany przez Eclipse nie wie, gdzie
stdio.h
istnieje.Musisz określić ścieżkę systemu plików, w której
stdio.h
się znajduje.Dokumentacja Eclipse opisuje to w kilku sekcjach dotyczących kompilatora:
A jeśli uzupełnianie kodu / indeksator lub preprocesor w szczególności nie może również zlokalizować
stdio.h
:Dokładna lokalizacja
stdio.h
będzie zależała od systemu, dla którego zamierzasz napisać kod. Jeśli piszesz kod dla tego samego systemu, na którym używasz Eclipse, standardowa lokalizacja to/usr/include/stdio.h
Linux, macOS, Cygwin itp.Jeśli kompilujesz krzyżowo dla oddzielnego / zdalnego systemu docelowego (np. Android, Raspberry Pi, STM32), zostanie on zlokalizowany gdzieś w SDK, który zainstalowałeś dla tego systemu. Będziesz musiał odwołać się do tej konkretnej dokumentacji SDK.
źródło
Uznałem te odpowiedzi (w tym zaakceptowaną) za nieco tajemnicze.
Dla mnie musiałem dodać ścieżkę, w której znajduje się stdio.h (jak powiedział @ardnew). W Eclipse otwierasz Właściwości swojego projektu, rozwijasz „C / C ++ Ogólne” i wybierasz „Ścieżki i symbole”.
Upewnij się, że dodałeś
include
katalog dla każdego języka, którego używasz. (W moim przypadku musiałem po prostu dodać go do GNU C ++.)źródło
/usr/bin/xcode-select --install
a następnie będziesz mógł wskazać Eclipse na/usr/include/
dodając tylko do bazy wiedzy, właśnie to zrobiłem na win7 z cygwin.
to wydaje się działać w moim przypadku.
uwzględnij ścieżki dla c:
dołącz ścieżki do języka c ++:
to daje mi czystą kompilację hello world.
źródło
Przejdź do Project> Properties> C / C ++ General> Preprocessor Includes> Providers i wybierz oba:
Dla każdego z nich wybierz również podpunkt: „Użyj dostawcy globalnego współdzielonego między projektami”.
Testowane na Eclipse 4.8.0 w Ubuntu 16.04 z C i C ++ Hello World.
źródło
Może rozwiązać problem. (Przepraszam za zły angielski)
źródło
Używam Eclipse z Cygwin i to zadziałało:
Przejdź do Project> Properties> C / C ++ General> Preprocessor Includes ...> Providers i wybierz "CDT GCC Built-in Compiler Settings Cygwin [Shared]".
źródło
Pracuję z wieloma konfiguracjami kompilatorów krzyżowych , w których muszę używać różnych lokalizacji dla plików nagłówkowych STD (i innych zmiennych środowiskowych).
Rozwiązaniem było skonfigurowanie indeksatora tak, aby korzystał z aktywnej konfiguracji.
Niestety z powodu błędu w eclipse opcja nie jest przechowywana lokalnie, więc jeśli chcesz zapisać konfigurację po ponownym otwarciu eclipse , musisz użyć konfiguracji obszaru roboczego .
Okno -> Preferencje -> C / C ++ -> Indeksator -> Użyj konfiguracji aktywnej kompilacji
Spowoduje to, że eclipse użyje odpowiedniego kompilatora, który jest ustawiony w aktywnej konfiguracji Cross GCC projektu.
źródło
Jak zauważają najlepsze odpowiedzi, konieczne jest określenie, gdzie znajdują się foldery kompilacji, które można dodać za pomocą okna dialogowego dostępnego po kliknięciu projektu prawym przyciskiem myszy i wybraniu Właściwości-> C / C ++ Ogólne-> Ścieżki i symbole.
Pozostaje pytanie, jakie ścieżki należy dodać.
Jeśli masz poprawnie skonfigurowane gcc do dostępu z linii poleceń i chcesz wiedzieć, jakie są domyślne ścieżki dołączania, których używa, po prostu zapytaj; w zależności od języka, który Cię interesuje, użyj:
... to wyświetli listę domyślnych ustawień kompilatora, które są używane podczas wywoływania gcc (i to polecenie działa również, jeśli "gcc" jest naprawdę aliasem dla clang, jak na OSX).
Na dole będzie lista katalogów z dołączonymi plikami:
Jeśli wprowadzisz wymienione tutaj katalogi, w podanej kolejności, do okna dialogowego ścieżek i symboli Eclipse, Eclipse CDT powinno być w stanie znaleźć standardowe nagłówki i być może jakieś dodatkowe nagłówki specyficzne dla twojego systemu operacyjnego.
(Z podziękowaniami za odpowiedź Devnulla na powiązane pytanie.)
źródło
W ADT wykonałem następujące czynności:
źródło
Zwykle Eclipse powinno być w stanie automatycznie rozwiązać standardowe pliki dołączane. Robi to, wywołując gcc i pytając o jego konfigurację. Najprawdopodobniej Eclipse nie znajduje twojego gcc (a przynajmniej wersji, której używasz do kompilacji).
Zamiast określać wszystkie standardowe ścieżki dołączania w ustawieniach projektu, prawdopodobnie chcesz się upewnić, że Eclipse znajdzie gcc. Dodaj katalog, w którym znajduje się gcc, do zmiennej środowiskowej PATH przed uruchomieniem Eclipse.
Jeśli chcesz, aby różne projekty korzystały z różnych kompilatorów, możesz dostosować opcje wykrywania. Są one domyślnie ukryte, więc najpierw włącz je w oknie> Preferencje> C / C ++> Ustawienia stron właściwości> Wyświetl stronę „Opcje wykrywania”. Następnie możesz je znaleźć w C / C ++ Build> Discovery Options we właściwościach projektu.
źródło
Używam środowiska CodeWarrior IDE opartego na eclipse do projektów osadzonych i właśnie rozwiązałem ten problem, usuwając i ponownie dodając adresy źródłowe do sekcji Właściwości projektu-> C / C ++ Ogólne-> Ścieżka i symbole-> Dołącz katalogi. Oznacza to, że istnieje wiele powodów, aby przyjąć komunikat „Nierozwiązane uwzględnienie:”, a także wiele rozwiązań.
źródło
Błąd podczas konfigurowania ścieżek i symboli polega na tym, że początkowo skonfigurowałem ścieżki dołączania dla innego języka. Pracuję z CDT i Cygwin gnu C ++. Musisz więc skonfigurować symbole i ścieżki w języku GNU C ++.
źródło
Ustawiono również
${COMMAND}
nagcc
w systemie LinuxPod:
Zastąpić:
z:
Jeśli tego nie zrobisz, standardowe wyjście Eclipse pokaże:
i logi pod
${HOME}/eclipse-workspace/.metadata/.log
pokazem:ponieważ
${COMMAND} ${FLAGS}
są puste, więc Eclipse próbuje wykonać plik-E
następną.Zastanawiam się, czy możemy poprawnie zdefiniować
COMMAND
iFLAGS
zmienne w ustawieniach, ale próbowałem dodać je jako zmienne kompilacji i nie zadziałało.Wersja pytania w C ++: Jak rozwiązać problem „Nierozwiązane włączenie: <iostream>” w pliku C ++ w Eclipse CDT?
Testowane na Eclipse 2020-03 (4.15.0), Ubuntu 19.10 i tym minimalnym projekcie Makefile z istniejącymi źródłami .
źródło
Czy sprawdzasz, czy jest kompilowany z wiersza poleceń? Dla mnie pomaga w Linuksie, apt install libc-dev.
źródło