我正在尝试使用 qmake 在我的系统中编译一个项目。该项目的某些依赖项未安装,但位于我的主目录中,大致如下所示:libs 文件:/home/myusername/local/lib
我的包含目录 /home/myusername/local/include
.在包含目录中,我有一个文件夹,qjson
使用库中所需的 header 。在 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
}
生成的 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 在那里?
我使用 MinGW g++ 在 Windows 上工作时没有问题。
最佳答案
我注意到 QT 的自动包含路径没有尾部斜杠,而你的有。您是否尝试过在没有尾部斜杠的情况下编写路径?
linux-g++ {
INCLUDEPATH += /home/myusername/local/include
LIBS += -L/home/myusername/local/lib -lqjson
}
关于c++ - gcc -I 和 -L 选项似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799705/