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

标签 c++ linux gcc include-path qjson

我正在尝试使用 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/

相关文章:

linux - 使用 wget 时同时使用 -i 和 -O

c++ - C++函数返回错误的数据类型

c - 编译 C 程序时无法链接到 Rust 编译的库

c++ - 未定义对 operator new 的引用

c++ - 自己的 std::is_function 实现

c++ - 添加到包含 vector 值的无序映射

c++ - 尝试在 C++ 中打开浏览器

javascript - Charles Proxy 和 Interceptor 没有在 Ubuntu 中跟踪任何 http 请求

android - 构建 Opencv4.3 Android 共享库错误

c++ - 在使用 boost 预处理器序列时避免扩展宏