2011-07-23 19 views
5

Próbuję skompilować projekt w moim systemie przy użyciu qmake. Niektóre zależności projektu nie są zainstalowane, ale znajdują się w moim katalogu domowym, mniej więcej tak: pliki libs: /home/myusername/local/lib i mój obejmuje katalog /home/myusername/local/include. Wewnątrz katalogu include mam folder, qjson z potrzebnymi nagłówkami z biblioteki. W folderze lib mam pliki libqjson.so libqjson.so.0 libqjson.so.0.7.1.Opcje gcc -I i -L nie działają.

Mój plik projektu qmake wygląda mniej więcej tak:

linux-g++ { 
INCLUDEPATH += /home/myusername/local/include/ 
LIBS += -L/home/myusername/local/lib/ -lqjson 
} 

a wygenerowany makefile będzie produkować poleceń takich jak ten:

g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB \ 
    -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../qbuzz \ 
    -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui \ 
    -I/usr/include/qt4 -I/home/myusername/local/include/ -I. -I. -I../myproject -I. \ 
    -o qbuzz-result.o ../myproject/myfile.cc 

Jest oczywiste, że mój obejmują katalog jest w opcji -I z gcc. myfile.cc zawiera m.in. takie jak ten:

#include <qjson/parser.h> 

Jednak po uruchomieniu zrobić, pojawia się błąd:

../myproject/myfile.cc:2:26: fatal error: qjson/parser.h: No such file or directory 
compilation terminated. 

Teraz, jeśli zmodyfikować zmienną środowiskową CPLUS_INCLUDE_PATH dodać moje lokalnego pliku include, ja nie ma problemów tam, ale w fazie łącznikowej mam błąd:

/usr/bin/ld: cannot find -lqjson 
collect2: ld returned 1 exit status 

choć polecenie łącznikiem było:

g++ -omyprogram main.o mainwindow.o myfile.o moc_mainwindow.o -L/usr/lib \ 
    -L/home/myusername/local/lib/ -lqjson -lQtGui -lQtNetwork -lQtCore -lpthread 

Mogę również obejść modyfikację zmiennej środowiskowej LIBRARY_PATH. Jednak szukam rozwiązania, które polega na modyfikowaniu jak najmniejszej liczby zmiennych środowiskowych, a ostatecznie dlaczego są dostępne opcje -L i -I?

Pracuję w systemie Windows bez problemów za pomocą MinGW g ++.

+0

człowiek to z pewnością niepokoi. ale mam tylko guzy – marinara

+0

LIBRARY_PATH lub LD_LIBRARY_PATH? –

Odpowiedz

1

Zauważam, że ścieżki automatycznego dodawania QT nie mają końcowych ukośników, a twoje. Czy próbowałeś pisać ścieżki bez ukośnych ukośników?

linux-g++ { 
INCLUDEPATH += /home/myusername/local/include 
LIBS += -L/home/myusername/local/lib -lqjson 
} 
1

G ++ i przyjaciele (np. Jako, ld, itp.) Nie podają bezpośrednio dokładnie, gdzie szukają plików nagłówkowych i bibliotek. Jednym ze sposobów debugowania tego jest uruchomienie strace -o output.txt -eopen -s 1024 -f qmake. Spowoduje to uruchomienie qmake rejestrowania wszystkich wywołań systemowych open wywołań systemowych qmake i wszystkie potomne przetwarza je. Będziesz wtedy mógł zobaczyć, w jakich katalogach iw jakiej kolejności szuka plików nagłówkowych (i bibliotek). Przykładowy wyciąg wyjściowy dla stdio.h:

26069 open("/usr/lib/gcc/x86_64-redhat-linux/4.6.0/include/stdio.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory) 
26069 open("/usr/local/include/stdio.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory) 
26069 open("/usr/include/stdio.h", O_RDONLY|O_NOCTTY) = 4 
Powiązane problemy