我正在尝试设置OpenCV
以便在OSX 10.7.5 / MacbookPro 2.5 Ghz Intel Core 2 Duo上使用QT
。我在这里看到了一些相关问题(How to link opencv in QtCreator and use Qt library和How do you set up OpenCV with QT in OSX?),但没有太多细节。在QT网站和我的网络搜索中,所有信息似乎都与Windows或Linux有关。
我列出了我的设置和代码如下。当我运行代码时出现错误::-1: error: symbol(s) not found for architecture x86_64
这是否意味着它找不到东西,因为路径错误或因为我可能为x86_32构建了openCV?有没有办法检查后者?我对部分配置和设置过程并不那么精明。
更新2
控制台输出低于 - 可能错误很明显?
02:44:38: Running steps for project RP_openCV_01...
02:44:38: Configuration unchanged, skipping qmake step.
02:44:38: Starting: "/usr/bin/make"
clang++ -headerpad_max_install_names -mmacosx-version-min=10.6 -o RP_openCV_01 main.o -L/usr/local/lib -1ibopencv_core.2.4.6,dylib -1ibopencv_imgproc.2.4.6.dylib -F/Users/rise/Qt5.0.2/5.0.2/clang_64/lib -framework QtCore
clang: warning: argument unused during compilation: '-1ibopencv_core.2.4.6,dylib'
clang: warning: argument unused during compilation: '-1ibopencv_imgproc.2.4.6.dylib'
Undefined symbols for architecture x86_64:
"cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
_main in main.o
"cv::namedWindow(std::string const&, int)", referenced from:
_main in main.o
"cv::Mat::deallocate()", referenced from:
_main in main.o
"cv::imread(std::string const&, int)", referenced from:
_main in main.o
"cv::imshow(std::string const&, cv::_InputArray const&)", referenced from:
_main in main.o
"cv::waitKey(int)", referenced from:
_main in main.o
"cv::fastFree(void*)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [RP_openCV_01] Error 1
02:44:38: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project RP_openCV_01 (kit: Desktop Qt 5.0.2 clang 64bit)
When executing step 'Make'
到目前为止(tl; dr):
从源代码构建并安装了最新版本的openCV(2.4.6),并使用一些命令行程序对其进行了测试。
安装了最新版本的QT(5.1)并能够运行所有示例等。
指定了项目文件中的路径(如下)
QT += core QT -= gui TARGET = RP_openCV_01 CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp INCLUDEPATH += /usr/local/include\ LIBS += -L/usr/local/lib
/usr/local/include
和/usr/local/lib
main.cpp中的简单示例代码
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main() {
// read an image
cv::Mat image= cv::imread("dog.jpg");
// create image window named "My Image"
cv::namedWindow("My Image");
// show the image on window
cv::imshow("My Image", image);
// wait key for 5000 ms
cv::waitKey(5000);
return 1;
}
更新1
我根据教程尝试的另一件事是在QT配置文件中指定libs(如下图所示)。该教程适用于Windows,但我不知道OSX是否或如何不同。在Windows示例中它是-1ibopencv_core246d
我在有和没有分隔期但没有“d”的情况下尝试过它。当然,lib的全名是“libopencv_core.2.4.6.dylib”等。
这些重要的细节总是让我兴奋不已,但在教程中经常会假设人们知道这些东西。
LIBS += -L/usr/local/lib \
-1ibopencv_core.2.4.6 \
-1ibopencv_imgproc.2.4.6 \
-1ibopencv_features2d.2.4.6 \
-1ibopencv_highgui.2.4.6
答案 0 :(得分:7)
只是一个天真的错误
正确的声明是:
LIBS += -L/usr/local/lib \
-lopencv_core \
-lopencv_imgproc \
-lopencv_features2d\
-lopencv_highgui
答案 1 :(得分:1)
我只是偶然发现了同样的问题。以下是我解决它的方法:
正如sansuiso已经建议的那样,问题似乎是您尝试链接的C ++ - STD-lib。您可能正在尝试链接libc ++(LLVM ...),但应使用libstdc ++(GNU C ++ ...)。
使用Qt Creator,您可以将以下内容添加到.pro文件中:
mac: CONFIG += MAC_CONFIG
MAC_CONFIG {
QMAKE_CXXFLAGS = -std=c++11 -stdlib=libstdc++ -mmacosx-version-min=10.7
QMAKE_LFLAGS = -std=c++11 -stdlib=libstdc++ -mmacosx-version-min=10.7
}
这个答案对您的问题也很有意思:https://stackoverflow.com/a/12852913/1141118
希望这有帮助!
答案 2 :(得分:0)
我通过macports成功安装了opencv,Qt和PyQt。
答案 3 :(得分:0)
您在这里面临两个潜在问题:
/usr/local
中动态库的路径。您可以通过不同的方法来避免这种情况:使用静态opencv lib,使用install_tool
更改输出二进制文件中编码的库的路径,或者使用QtCreator的首选项将DYLD_LIBRARY_PATH
变量设置为类似/usr/local/lib
运行程序时的内容。答案 4 :(得分:0)
以下是我在 OSX 中的 QT 中设置 Opencv 所采取的步骤:
1- 安装 QT
2- 安装 OpenCV4
3- 在项目文件中添加以下几行:
INCLUDEPATH += /usr/local/include/opencv4\
LIBS += -L/usr/local/lib \
-lopencv_core \
-lopencv_imgproc \
-lopencv_features2d\
-lopencv_highgui
QMAKE_MACOSX_DEPLOYMENT_TARGET = 11.0
4- 在 Project 部分的 Built 部分下,取消选中以下内容:
Add build library search path to DYLD_LIBRARY_PATH and DYLD_FRAMEWORK_PATH
以下链接很有帮助: