Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Qt5.1/Qt5.2+Mac OS 10.9(Mavericks)+XCode 5.0.2,架构x86_64的未定义符号_Macos_Qt_Opencv_Undefined_X86 64 - Fatal编程技术网

Macos Qt5.1/Qt5.2+Mac OS 10.9(Mavericks)+XCode 5.0.2,架构x86_64的未定义符号

Macos Qt5.1/Qt5.2+Mac OS 10.9(Mavericks)+XCode 5.0.2,架构x86_64的未定义符号,macos,qt,opencv,undefined,x86-64,Macos,Qt,Opencv,Undefined,X86 64,环境:MacOS10.9+Qt5.1/Qt5.2+OpenCV2.4.7+XCode5.0.2 我可以通过终端编译以下程序 g++ -L/usr/local/lib -lopencv_core -lopencv_highgui \ -I/usr/local/include main.cpp 程序a.out运行正常 但是,当使用Qt 5.1/5.2运行此OpenCV程序时, 我得到了架构x86_64的未定义符号 但是,QT5对于一个简单的HeloWord C++程序来说是正常工作的。

环境:MacOS10.9+Qt5.1/Qt5.2+OpenCV2.4.7+XCode5.0.2

我可以通过终端编译以下程序

g++ -L/usr/local/lib -lopencv_core -lopencv_highgui \
    -I/usr/local/include  main.cpp
程序a.out运行正常

但是,当使用Qt 5.1/5.2运行此OpenCV程序时, 我得到了架构x86_64的未定义符号

<>但是,QT5对于一个简单的HeloWord C++程序来说是正常工作的。 发生了什么事

这是代码

#include <iostream>
#include "opencv2/highgui/highgui.hpp"

using namespace std ;
using namespace cv ;

int main()
{
    Mat img ;

    img = imread("image.jpg") ;

    return 0;
}
下面是编译消息

/Users/XXX/Qt5.2.0/5.2.0-beta1/clang_64/bin/qmake -spec macx-clang CONFIG+=debug -o Makefile /Users/XXX/Desktop/untitled/untitled.pro

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -Wl,-syslibroot

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -mmacosx-version-min=10.6 -o untitled main.o   -L/usr/local/lib -lopencv_core -lopencv_highgui -v 
使用-v来显示调用

Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -headerpad_max_install_names -macosx_version_min 10.6.0 -o untitled -lcrt1.10.6.o -L/usr/local/lib -syslibroot

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk main.o -lopencv_core -lopencv_highgui -lstdc++ -lSystem

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/lib/darwin/libclang_rt.osx.a
下面是错误消息

Undefined symbols for architecture x86_64:
"cv::imread(std::string const&, int)", referenced from:
      _main in main.o
.... and so on
我检查了这个问题与-lstdc++或-std=c++11或-stdlib=libstdc++无关。 通过使用命令行编译


有什么想法或建议吗?

这篇文章回答了这个问题

并解释为

我在这里引用

Qt二进制发行版使用-stdlib=libstdc++编译要与10.6兼容,10.9上的Xcode 5将默认选择-stdlib=libc++用于OS X 10.7和更好的版本。 因此,在本例中,使用标准库中的类(如std::string)的符号在链接时将无法正确解析。 这就是为什么在架构x86_64中未定义符号时会出现此错误。查看构建opencv的标准库: otool-L libopencv_XXX.dylib。 您必须使用正确的版本重建它,或者更改Qt的mkspec以使用较新的版本

我通过更改../Qt5.2.0/5.2.0-rc1/clang_64/mkspecs/macx-clang/qmake.conf来解决这个问题


记得在重建之前清理你的项目

如果您来到这里,因为您更改了config+=11,但什么也没发生,请在重建之前尝试清理项目。

问题不在于系统。在Mac上,您只需包含imgcodecs头,并包含相应的lib文件。这会解决你所有的麻烦


-lopencv_imgcodecs

您似乎没有在OpenCV中链接。或者你链接的内容中没有imread谢谢你的评论。我还认为问题在于链接器。我试着运行一个简单的引导:文件系统程序。这给了我同样的错误。问题可能是你需要链接另一个组件,比如-lopencv_core-lopencv_highgui-lopencv_somethingforimagesi,我可以在终端中用g++-L/usr/local/lib-lopencv_core-lopencv_highgui-I/usr/local/include main.cpp编译,我认为这个问题不是由于缺少-L造成的。不管怎样,我都想得到你的帮助,但我认为我应该回到Mac OS X10.8,因为我已经为此工作了5天。如果你多次安装该库,你可能会得到不同版本的库。。。您可以找到您正在使用的版本,并尝试读取与NM的符号,看看它是否在图书馆。注意,虽然你可以改变部署目标,一切都会链接罚款,你仍然必须确保只有两个可能的C++运行库库中的一个LIbc++和LIbsdc++将出现在你的最终程序。将使用其中一个运行时分配的对象传递给使用另一个运行时的库会导致崩溃。您需要确保所有试图使用出口C++的API都是针对同一C++运行时构建的。我已经改变QAQueMaxOxxAdppMyTythObjor=10.9,但仍然没有用,为什么?
Undefined symbols for architecture x86_64:
"cv::imread(std::string const&, int)", referenced from:
      _main in main.o
.... and so on
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9