不同的运行时行为取决于程序的启动方式(终端与 Qt Creator)
Posted
技术标签:
【中文标题】不同的运行时行为取决于程序的启动方式(终端与 Qt Creator)【英文标题】:Different runtime behavior depending on how the program is started (terminal vs. Qt Creator) 【发布时间】:2017-12-12 07:58:11 【问题描述】:我的程序的运行时行为有问题,这取决于我如何启动它(终端或 Qt Creator)。
这是一个使用 openCV 匹配两个图像的简短程序。在内部,openCV 大概做了一些优化,所以运行时使用/可以使用多核。
当我从终端启动程序时,我可以观察到所有内核都已使用。 => 快速程序
如果我直接从 Qt Creator 启动程序,将只使用一个内核。 => 慢程序
有人对此行为有解释吗? 我用 Qt Creator 创建了二进制文件,为什么我会得到两种不同的行为,这取决于我的执行方法?
这是一个例子:
//main.cpp
#include <opencv2/opencv.hpp>
using namespace cv;
void compute(Mat &img, vector<KeyPoint> &kVec, Mat &dMat)
StarFeatureDetector featureDectector(16, 5, 10, 8, 5);
featureDectector.detect(img, kVec);
BriefDescriptorExtractor descriptorExtractor(64);
descriptorExtractor.compute(img, kVec, dMat);
int main(int argc, char** argv)
Mat img1 = cv::imread("img1.pgm", CV_LOAD_IMAGE_GRAYSCALE);
Mat img2 = cv::imread("img2.pgm", CV_LOAD_IMAGE_GRAYSCALE);
Mat dMat1, dMat2;
vector<KeyPoint> kVec1, kVec2;
for (int i = 0; i < 10; i++)
std::cout << i << std::endl;
compute(img1, kVec1, dMat1); // compute Key-Points first image
compute(img2, kVec2, dMat2); // compute Key-Points second image
vector< vector<DMatch> > cVec;
BFMatcher matcher(NORM_HAMMING, false);
matcher.knnMatch(dMat1, dMat2, cVec, 2);
#.pro file
CONFIG += console
CONFIG -= app_bundle
CONFIG += c++14
TARGET = test
TEMPLATE = app
CONFIG += opencv
include(3rdparty.pri) #openCV include
SOURCES += main.cpp
【问题讨论】:
如果在调试模式下从 IDE 启动程序会怎样? 我尝试了“发布”和“调试”工具包,但行为相同。 【参考方案1】:QtCreator 执行环境可以有不同的使用路径集。 例如,您可以拥有自己的 Qt 构建,它不会反映在系统 PATH 变量中。在这种情况下,您也可以构建程序并在 QtCreator 中运行。但是系统命令行环境可以使用另一个 Qt 库,这反映在 PATH 变量中。 我想你有同样的问题。可能与 Qt 库无关。
【讨论】:
感谢您的回答!如何检查这些不同的 PATH 变量?我正在开发一个 linux 系统。 我可以建议您比较运行时链接库的列表。对于每种情况。但我不知道如何检查运行时应用程序的列表。 “项目”选项卡中 QtCreator 位置的环境变量列表。命令行变量列表,运行时您可以使用“导出”命令查看。您还可以使用“ldd”程序检查命令行模式下将附加的库列表。但我认为找到解决方案的方法并不简单。请使用第一个建议。您将看到所有环境变量的最终效果。 没有更简单的方法吗?我认为这只是 Qt Creator 配置的事情。如果我启动我的 Qt Creator 并且它只能“访问”一个内核,那么 Qt Creator 的每个程序 startet 也只能访问一个内核。这意味着 qt 只需要获得更多的执行权。这是可能的还是我想得太容易了? 这可能取决于我的 openCV 版本/构建吗?目前我正在玩另一个项目,它使用不同的 openCV 版本。在此示例中,使用了所有内核。 是的,这可能是原因。检查另一个稳定的版本。以上是关于不同的运行时行为取决于程序的启动方式(终端与 Qt Creator)的主要内容,如果未能解决你的问题,请参考以下文章