【发布时间】:2013-12-19 00:32:57
【问题描述】:
环境:Mac OS 10.9 + Qt5.1/Qt5.2 + OpenCV2.4.7 + XCode(5.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 对于简单的 HelloWorld c++ 程序正常工作。
发生了什么事?
这里是代码。
#include <iostream>
#include "opencv2/highgui/highgui.hpp"
using namespace std ;
using namespace cv ;
int main()
{
Mat img ;
img = imread("image.jpg") ;
return 0;
}
这是项目设置
INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/lib
LIBS += -lopencv_core -lopencv_highgui -v
cache()
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
这是编译信息
/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++无关。
通过使用命令行编译。
有什么想法或建议吗?
【问题讨论】:
-
您似乎没有在 OpenCV 中进行链接。或 imread 不在您链接的目录中
-
感谢您的评论。我也认为问题出在链接器上。我试图运行一个简单的 boot:filesystem 程序。它给了我同样的错误。
-
问题可能是您需要链接另一个组件,例如
-lopencv_core -lopencv_highgui -lopencv_somethingforimages -
因为我可以在终端中编译 "g++ -L/usr/local/lib -lopencv_core -lopencv_highgui -I/usr/local/include main.cpp" 我认为这个问题不是由失踪的-l。任何方式都可以为您提供帮助,但我认为我应该回到 Mac OS X10.8,因为我已经为此工作了 5 天。
-
好吧,如果您多次安装该库,您最终可能会得到不同版本的库...您可以找到您正在使用的版本并尝试使用
nm读取符号看看它是否在图书馆里。
标签: macos qt opencv undefined x86-64