首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pkg-config --cflgas opencv和pkg-config --ldflag但不能执行的程序正常运行(ubuntu 16.04)

使用pkg-config --cflgas opencv和pkg-config --ldflag但不能执行的程序正常运行(ubuntu 16.04)
EN

Stack Overflow用户
提问于 2019-12-14 22:40:28
回答 1查看 265关注 0票数 0

最近,我在我的ubuntu16.04机器上安装了opencv (我之前已经做过很多次了,使用它也没问题)。我试过编译yolo程序,它编译正常,运行正常。当我在Makefile中设置OPENCV=1时,它会用opencv编译程序。为了设置编译和链接标志,它有这两行。

代码语言:javascript
复制
LDFLAGS+= `pkg-config --libs opencv` -lstdc++
COMMON+= `pkg-config --cflags opencv`

我的pkg-config命令可以正常工作。请参见下面的输出。

代码语言:javascript
复制
ckim@chan-ubuntu:~/YOLOV2/darknet$ pkg-config --cflags opencv
-I/home/ckim/opencv_install/installation/OpenCV-3.4/include/opencv -I/home/ckim/opencv_install/installation/OpenCV-3.4/include
ckim@chan-ubuntu:~/YOLOV2/darknet$ pkg-config --libs opencv
-L/home/ckim/opencv_install/installation/OpenCV-3.4/lib -lopencv_stitching -lopencv_videostab -lopencv_superres -lopencv_surface_matching -lopencv_dnn_objdetect -lopencv_line_descriptor -lopencv_aruco -lopencv_img_hash -lopencv_xobjdetect -lopencv_dpm -lopencv_freetype -lopencv_stereo -lopencv_face -lopencv_objdetect -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_saliency -lopencv_hfs -lopencv_ccalib -lopencv_tracking -lopencv_datasets -lopencv_plot -lopencv_optflow -lopencv_ximgproc -lopencv_fuzzy -lopencv_bioinspired -lopencv_highgui -lopencv_videoio -lopencv_text -lopencv_dnn -lopencv_reg -lopencv_hdf -lopencv_bgsegm -lopencv_rgbd -lopencv_sfm -lopencv_xfeatures2d -lopencv_calib3d -lopencv_shape -lopencv_imgcodecs -lopencv_features2d -lopencv_video -lopencv_ml -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core

几天前,我试着编译了一个简单的opencv程序,我在一个网页上找到了它,并试着编译它。(我想测试一个基本显示窗口的行为)。程序是这样的。非常典型)

代码语言:javascript
复制
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
    if( argc != 2)
    {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }

    Mat image;
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file

    if(! image.data )                              // Check for invalid input
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }

    namedWindow( "Display window", WINDOW_AUTOSIZE );// Create a window for display.
    imshow( "Display window", image );                   // Show our image inside it.

    waitKey(1);                                          // Wait for a keystroke in the window
    return 0;
}

当我使用命令编译和链接它时

代码语言:javascript
复制
gcc -c test.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` -o test

它没有给我任何错误,我看到了test文件,但它不是可执行的。当我在设置chmod +x test之后运行它时,我得到

代码语言:javascript
复制
ckim@chan-ubuntu:~/opencvtest$ ./test
bash: ./test: cannot execute binary file: Exec format error
ckim@chan-ubuntu:~/opencvtest$ file test
test: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

会出什么问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-14 23:24:28

根据你的命令行..。

代码语言:javascript
复制
gcc -c test.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` -o test

包括-c标志,它告诉编译器只编译--不链接。还有。因为您的代码是c++而不是c,所以您需要链接到正确的运行时库。这意味着使用g++而不是gcc。所以命令应该是...

代码语言:javascript
复制
g++ test.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` -o test
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59336106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档