gcc -I和-L选项似乎不起作用

Sam*_*yon 5 c++ linux gcc include-path qjson

我正在尝试使用qmake在我的系统中编译项目.项目的某些依赖项未安装但位于我的主目录中,或多或少像这样:libs文件:/home/myusername/local/lib和我的包含目录/home/myusername/local/include.在include目录中,我有一个文件夹,qjson包含库中所需的标题.在lib文件夹中我有文件libqjson.so libqjson.so.0 libqjson.so.0.7.1.

我的qmake项目文件看起来像这样:

linux-g++ {
INCLUDEPATH += /home/myusername/local/include/
LIBS += -L/home/myusername/local/lib/ -lqjson
}
Run Code Online (Sandbox Code Playgroud)

生成的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
Run Code Online (Sandbox Code Playgroud)

很明显,我的include目录是-Igcc 的选项.myfile.cc包含像这样的包含:

#include <qjson/parser.h>
Run Code Online (Sandbox Code Playgroud)

但是,在运行make之后,我收到错误:

../myproject/myfile.cc:2:26: fatal error: qjson/parser.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

现在,如果我修改环境变量CPLUS_INCLUDE_PATH以添加我的本地包含文件,那么我没有问题,但是在链接器阶段我得到了错误:

/usr/bin/ld: cannot find -lqjson
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

即使链接器命令是:

g++ -omyprogram main.o mainwindow.o myfile.o moc_mainwindow.o -L/usr/lib \
    -L/home/myusername/local/lib/ -lqjson -lQtGui -lQtNetwork -lQtCore -lpthread 
Run Code Online (Sandbox Code Playgroud)

我也可以绕过修改环境变量LIBRARY_PATH.但是我正在寻找一种依赖于尽可能少地修改环境变量的解决方案,毕竟,为什么选项-L和-I存在?

我使用MinGW g ++在Windows上工作没有问题.

orl*_*rlp 1

我注意到 QT 的自动包含路径没有尾部斜杠,而你的有。您是否尝试过编写不带尾部斜杠的路径?

linux-g++ {
 INCLUDEPATH += /home/myusername/local/include
 LIBS += -L/home/myusername/local/lib -lqjson
}
Run Code Online (Sandbox Code Playgroud)