Może mi ktoś powiedzieć do czego służy ta dyrektywa: #include_next .
Jak wywołać tą bibliotekę ?
Może mi ktoś powiedzieć do czego służy ta dyrektywa: #include_next .
Jak wywołać tą bibliotekę ?
Przeczytaj ten wątek:
http://forum.dobreprogramy.pl/viewtopic.php?t=152275
Nikt tutaj nie jest wróżką.
#include_next działa jak #include z tym że załącza plik nagłówkowy nie z pierwszego napotkanego katalogu, a z drugiego. Przeważnie - implementacja w GCC2 ma błędy.
Ok, prostuje pytanie…
Wiadomo, że po dyrektywie #include są biblioteki, np: stdio.h.
Po kompilacji programu wyskakuje mi błąd, że nieposiadam takiej biblioteki, #include_next < stdio >. Gdzie mam umieścić tę bibliotekę? W forderze include czy stworzyć nowy -include_next?
W pierwszej kolejności odpowiedz sobie na pytanie: co co Ci include_next i czy Twój kompilator obsługuje include_next. Jeśli kompilator obsługuje include_next to działanie jest niesamowicie proste:
Każdy kompilator ma kilka katalogów z których pobiera pliki nagłówkowe. Nie można pobrać wszystkich jednocześnie, więc sprawdzane są katalogi w pewnej kolejności i pierwszy napotkany, pasujący plik nagłówkowy zostaje użyty. Używając include_next załączysz drugi napotkany plik nagłówkowy.
Załóżmy, że pracujesz w Linuksie (najwyraźniej wzbraniasz się przed lekturą podanego wątku i chcesz mi zapewnić zabawę w zgadywanie co i jak robisz) i kolejność katalogów, z których pobierane są pliki nagłówkowe to:
/usr/include
/usr/local/include
./
Jeśli w każdym z nich istnieje plik blah.h, include załączy ten z /usr/include, include_next ten z /usr/local/include. Nie ma w tym mechaniźmie niczego skomplikowanego.
Poza tym - include (dołączenie do programu pliku nagłówkowego) nie jest równoznaczne z załączeniem biblioteki. Plik nagłówkowy informuje jakie funkcje i klasy można importować z biblioteki (definiuje prototypy). Sama biblioteka dołączana jest w czasie linkowania i nie ma na nią wpływu include czy include_next - linkowanie jest specyficzne platformie i kompilatorowi. Jak działa u Ciebie - nie wiem, bo się nie chcesz podzielić tak tajną informacją jak to z jakiego kompilatora korzystasz i pod jakim systemem.
Więc jeszcze raz:
http://forum.dobreprogramy.pl/viewtopic.php?t=152275
Odpowiedz na postawione tam pytania i napisz jaki jest problem a nie sugeruj jak chcesz go rozwiązać. “Gdzie mam skopiować pliki?” jest źle postawionym pytaniem, bo prawdopodobnie problem nie jest w umiejscowieniu czegoś gdzieś, a w kodzie. Nie pytaj o to jak zaimplementować swoje (prawdopodobnie błędne) rozwiązanie tylko postaw podstawowy problem.
Dobra to zacznę od poczatku:
-system Xp
-praca na borlandzie 6 (stary ale sie przyzwyczaiłem)
-biblioteka powiekszona do około 250MB
Część kodu zamieszczam poniżej:
/* .............................................*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SCAN
#undef LARGE_NET
#undef FREEBSD
#define BROADCAST 2
enum (TCP_PENDING = 1, TCP_CONNECTED = 2 itd.....
…oczywiście dalej jest więcej…ale nie o to chodzi. I teraz przy kompilacji wychodzi tak:
#ifndef _HACKED_UNISTD_INCLUDED
#define _HACKED_UNISTD_INCLUDED
[color=red]#include_next [/color] [i]tutaj jest błąd[/i]
#ifdef _POSIX_JOB_CONTROL
#undef _POSIX_JOB_CONTROL
#define _POSIX_JOB_CONTROL 1
#endif
na dole zaś kompilator podpowiada, że…
[C++Error]unistd.h(4):E2048 Unknown preprocessor directive:'include_next'
Problem dotyczy nie tylko tego kodu ale i innych-zmieniają się tylko nazwy bibliotek. Tutaj dotyczy ale mam jeszcze z
Odpowiedź w takim razie masz w jednym z poprzednich maili - kompilator nie obsługuje dyrektywy include_next. Jest to wyraźnie zaznaczone w komunikacie błędu: “preprocessor directive” to dyrektywa kompilatora zaczynająca się od # (include, pragma, ifndef, itd.).
Co więcej, miałeś nieco wcześniej napisane, że include_next jest w gruncie rzeczy specyficzne dla GCC 2.
Czyli w telegraficznym skrócie - nie wiem skąd masz te pliki nagłówkowe, ale z Twoim kompilatorem współpracowały nie będą. Możesz próbować to naprawić zmieniając include_next na include i starając sie czasem dopisać odpowiedni podkatalog przed nazwą pliku nagłówkowego (np. #include_next może się zamienić w #include lub #include ).