我想在我的系統中使用qmake編譯一個項目。該項目的一些依賴關係沒有安裝,但駐留在我的主目錄中,或多或少像這樣:libs文件:/home/myusername/local/lib
和我的包含目錄/home/myusername/local/include
。在include目錄中,我有一個文件夾,qjson
與庫中需要的頭文件。在lib文件夾中,我有文件libqjson.so libqjson.so.0 libqjson.so.0.7.1
。gcc -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 ++時沒有問題。
這個人肯定是令人擔憂的。但我什麼也沒有猜到 – marinara
LIBRARY_PATH或LD_LIBRARY_PATH? –