Problem z podlinkowaniem pliku w QtCreator

0

Witam.

Mam problem z podlinkowaniem pliku w moim projekcie w QtCreator'rze. Kompilator zwraca taki błąd:

ReqTransMgr.cpp28: fatal error: RelOptRemoteID.h: Nie ma takiego pliku ani katalogu
compilation terminated.

mimo iż w pliku ReqTransMgr.cpp dodałem go: #include "RelOptRemoteID.h"

Co może być przyczyną ?

0

Przyczyną jest to, że nie można znaleźć tego pliku, przecież to jest napisane w tym błędzie.

Poszukaj czy ten plik nagłówkowy jest w katalogu, które są przeszukiwane podczas kompilacji. Poza katalogami systemowymi jest to też katalog, w którym znajduje się plik źródłowy oraz inne ścieżki, które można podać w pliku projektu.

0

Zapomniałem dodać ważną informację, że plik znajduję się w odpowiednim katalogu i ma oczekiwaną nazwę (umiem czytać komunikaty kompilatora).

informacja o nim znajduje się także tu (plik projektu):

Input

HEADERS += RelOptions/RelOptRemoteID.h \

Inne propozycje ?

0

Pytanie brzmi w jakim katalogu jest ReqTransMgr.cpp a w jakim RelOptRemoteID.h? Żeby to działało bez dodatkowych rzeczy w ten sposób: #include "RelOptRemoteID.h" to musi to być ten sam katalog. Oczywiście w #include możesz podać ścieżkę tak, żeby określała wzajemne położenie plików.

To, co jest napisane w pliku .pro w HEADERS ma znaczenie zdaje się tylko dla qmake. Co innego INCLUDEPATH.

0

Są w różnych katalogach:
Requestor/ReqTransMgr.cpp , RelOptions/RelOptRemoteID.h. Nie rozumiem dlaczego muszę być w innym katalogu. Pozostałe pliki nagłówkowe includowane w ReqTransMgr.cpp są również w innych katalogach. Wygląda na to, że jest to gdzieś definiowane. Wiesz, gdzie ? Chyba, że się mylę..

0

Co tu jest do rozumienia? Kompilator ma przeszukać cały komputer, żeby znaleźć te pliki? ;-) To Ty musisz mu pokazać, gdzie one są. Ścieżki z plikami nagłówkowymi dodaje się w pliku .pro w INCLUDEPATH (http://qt-project.org/doc/qt-4.8/qmake-variable-reference.html#includepath), tak jak pisałem wyżej możesz też po prostu podawać w #include skąd jest ten plik: #include "../RelOptions/RelOptRemoteID.h".

0

Po części pomogło. Zrobiłem tak: ../RelOptions/RelOptRemoteID.h. Nie mniej jednak w pliku .pro jest zdefiniowana ta ścieżka. Tak jak pisałem inne pliki nagłówkowe znajdujące się w innych katalogach nie wymagają podania pełnej ściezki.

0

ok, Wszystko jest tutaj: http://www.nopaste.pl/1jfl

Nie ma już problemu z podlinkowaniem tego nagłówka, ale nie mogę np wywołać konstruktora z klasy, która znajduje się w pliku: RelOptRemoteID.cpp

Błąd kompilatora jest następujący:

./Requestor/libRequestor.a(libRequestor_a-ReqTransMgr.o): In function ReqTransMgr::SendTcpMsg()': ReqTransMgr.cpp:(.text+0x2000): undefined reference to TRelOptRemoteID::TRelOptRemoteID(char*, int, TMsg*)'
collect2: ld returned 1 exit status
make[1]: *** [dibbler-requestor] Błąd 1

0

Coś cienko widzę ten plik *.pro.
W ramach wyjaśnienia HEADES += cos.h jest informacją dla qmake, że program moc powinien przetworzyć ten plik w celu wytworzenia meta danych (jeśli jest taka potrzeba dla danego pliku ma wytworzyć moc_cos.cpp) i tyle. NIE jest to informacja, o lokalizacji pliku lub jego "załączalności".
INCLUDEPATH powinno załatwić sprawę. Widzę, że kompilujesz pod Linuxem, pamiętaj, że na tym systemie wielkość liter ma znaczenie! Sprawdź czy nazwa pliku z include jest identyczna z tą z katalogu.
Upewnij się też, czy w INCLUDEPATH wielkość liter ścieżki przypadkiem też nie jest pomieszana.

A teraz moje zrzędzenie co do stylu pliku *.pro:
Strasznie masz namieszane. Jakoś nie wierzę, że piszesz to sam, z dużo jest tych plików (nawet jak byłoby was kilku). Zapewne wklejasz źródła z innych projektów. Czemu nie stosujesz bibliotek? Odseparuj się od cudzego kodu. Dołączaj do swojego projektu biblioteki i pliki nagłówkowe.
Źle też podszedłeś do multiplatformowości, widzę dodawanie plików źródłowych z katalogów "Port-linux" i "Port-win32" w każdym wypadku w plikach *.pro można zastosować warunkowe dodawanie źródeł.

0

Wielkość liter jest dobra. Nazwa przekopiowana. Na początku nie miałem w ogóle pliku .pro ( wygenerowałem go: "qmake -project"), gdyż jest to projekt, który ja sobie zaimportowałem do QtCreatora jako istniejący. Jest to projekt kilku osób ( dobre wnioski wyciągasz ), ale ja muszę dopisać pewną funkcjonalność do tego kodu. W zasadzie dostałem ten kod taki jaki jest. Całość została pomyślana już wcześniej dlatego niejako nie mogę się odseparować od cudzego kodu.

Możesz rozwinąć swoją myśl co do załączania warunkowego dla odpowiedniej platformy ?

Masz jakiś pomysł co do tego błędu kompilatora wspomnianego wyżej ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1