2011-07-23 73 views
5

我想在我的系統中使用qmake編譯一個項目。該項目的一些依賴關係沒有安裝,但駐留在我的主目錄中,或多或少像這樣:libs文件:/home/myusername/local/lib和我的包含目錄/home/myusername/local/include。在include目錄中,我有一個文件夾,qjson與庫中需要的頭文件。在lib文件夾中,我有文件libqjson.so libqjson.so.0 libqjson.so.0.7.1gcc -I和-L選項似乎不起作用

我的qmake項目文件看起來是這樣的:

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

而產生的makefile會產生類似的命令這一個:

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 

很顯然,我的include目錄是在-I選項的gcc。 myfile.cc包含有像這樣的:

#include <qjson/parser.h> 

然而,運行make後,我得到的錯誤:

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

現在,如果我修改環境變量CPLUS_INCLUDE_PATH添加我的地方包括文件,我沒有問題存在,但在鏈接階段我得到了錯誤:

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

即使連接器的命令是:

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

我也可以繞過修改環境變量LIBRARY_PATH。然而,我正在尋找一種依賴於儘可能少地修改環境變量的解決方案,畢竟爲什麼選項-L和-I存在?

我在Windows上使用MinGW g ++時沒有問題。

+0

這個人肯定是令人擔憂的。但我什麼也沒有猜到 – marinara

+0

LIBRARY_PATH或LD_LIBRARY_PATH? –

回答

1

我注意到QT的自動包含路徑沒有尾隨斜線,你的確如此。你有沒有嘗試寫沒有結尾斜線的路徑?

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

G ++和朋友(即如,LD等)將不會直接告訴你究竟在何處尋找頭文件和庫文件。一種調試方法是運行strace -o output.txt -eopen -s 1024 -f qmake。這將運行qmake記錄所有open系統調用qmake和它分叉的所有子進程。然後您將能夠看到它在哪些目錄中以及按什麼順序搜索頭文件(和庫)。 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