0

好的。所以这里。我目前正在尝试在我的 Xcode 项目中添加和使用一个名为 OpenCV 的动态库。我首先使用 .pkg 安装了 MacPorts。然后我打开终端并运行“sudo port install opencv”。MacPorts 然后安装了各种依赖项(FFMPEG/etc),然后将 OpenCV 安装到 .dylib 文件的“/opt/local/lib”文件夹和头文件的“/opt/local/include”文件夹中。然后我打开 Xcode 并打开命令行实用程序应用程序项目。我在我的项目中添加了一个组,然后在其中添加了所有 .dylib 文件(我认为这些被称为对动态库的引用,但我不确定 - 我是一个完全的初学者 - 我学习了 C++,我的第一门编程语言,仅仅一周前”)。在那之后,我在 Xcode 中单击了我的项目文件,然后转到构建设置,然后将“搜索路径”选项卡下的“标题搜索路径”更改为我之前提到的 /include 文件夹。库搜索路径已经设置为 /lib 文件夹,因为我已经添加了 .dylib 文件(我认为这就是发生的事情 - 不确定)。无论如何,然后我将以下示例代码从 opencv 网站复制并粘贴到我的 main.cpp 文件中,只是为了测试我的库是否有效。

//******************************示例代码**************** ************************************

#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_GRAYSCALE);
if(! image.data ) {
    // Read the file
    // Check for invalid input
    cout <<  "Could not open or find the image" << std::endl ;
    return -1; }
namedWindow( "Display window", CV_WINDOW_NORMAL );// Create a window for display.
imshow( "Display window", image ); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0; }

//********************示例文件代码结束 *********************** ***********************

在我完成所有这些之后,在我开始运行之前,我认为重要的是要注意 Xcode 没有抱怨它找不到我的头文件,而且它也没有抱怨库的新函数有任何语法错误应该加的。简而言之,main.cpp 文件上没有突出显示错误。然而,在我点击 Xcode 中的 Run 按钮后,所有错误都开始出现。以下是它产生的所有错误:

******************我点击运行后Xcode的错误**************************** ******************

愚蠢的堆栈溢出不会让我发布图片,所以这里是错误照片的链接: 在此处输入图像描述

*****************块结束****************************** ************************************ 所以,是的,我不知道我现在在做什么,我完全迷失了。我没有按照正确的步骤向我的项目添加动态库吗?哦,我忘记了它是什么,但我不知何故让 Xcode 忽略了这些语义问题(我不记得我是怎么做到的,或者我是否这样做了),但是一旦语义问题被忽略,唯一剩下的错误似乎与“Mach-O Linker Error”相关的东西,它说的是:“未定义的符号....架构/等”,然后说未定义的符号是我正在调用的库函数之一我的 main.cpp 文件。但是自从我删除了所有内容并重新开始后,该错误不再发生。所以现在我得到的唯一错误是图片中的错误。所以请帮忙!!!!我完全迷失了,我已经研究了几个星期,但我认为我的问题是我不知道我在寻找什么或我应该问什么问题。我上面列出的步骤只是我所做的。任何见解将不胜感激。提前致谢!!!!!!

____________EDIT___________________ 所以我再次重复上述步骤,但这次我得到这个错误: Ld /Users/Yash/Library/Developer/Xcode/DerivedData/OpenCVOptTEST-adchdkiefzmijfhahwtzcfqarzkw/Build/Products/Debug/OpenCVOptTEST normal x86_64 cd "/Users/Yash /编码文件夹/OpenCVOptTEST" setenv MACOSX_DEPLOYMENT_TARGET 10.8 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX .platform/Developer/SDKs/MacOSX10.8。sdk -L/Users/Yash/Library/Developer/Xcode/DerivedData/OpenCVOptTEST-adchdkiefzmijfhahwtzcfqarzkw/Build/Products/Debug -L/opt/local/lib -F/Users/Yash/Library/Developer/Xcode/DerivedData/OpenCVOptTEST- adchdkiefzmijfhahwtzcfqarzkw/Build/Products/Debug -filelist /Users/Yash/Library/Developer/Xcode/DerivedData/OpenCVOptTEST-adchdkiefzmijfhahwtzcfqarzkw/Build/Intermediates/OpenCVOptTEST.build/Debug/OpenCVOptTEST.build/Objects-normal/x86_64/OpenCVOptTEST.LinkFileList - mmacosx-version-min=10.8 -stdlib=libc++ -lopencv_calib3d.2.4.6 -lopencv_contrib.2.4.6 -lopencv_core.2.4.6 -lopencv_features2d.2.4.6 -lopencv_flann.2.4.6 -lopencv_gpu.2.4.6 -lopencv_highgui。 2.4.6 -lopencv_imgproc.2.4.6 -lopencv_legacy.2.4.6 -lopencv_ml.2.4.6 -lopencv_nonfree.2.4.6 -lopencv_objdetect.2.4.6 -lopencv_photo.2.4.6 -lopencv_stitching.2.4.6 -lopencv_superres.2.4。 6 -lopencv_ts.2.4。6 -lopencv_video.2.4.6 -lopencv_videostab.2.4.6 -o /Users/Yash/Library/Developer/Xcode/DerivedData/OpenCVOptTEST-adchdkiefzmijfhahwtzcfqarzkw/Build/Products/Debug/OpenCVOptTEST

架构 x86_64 的未定义符号:“cv::namedWindow(std::__1::basic_string, std::__1::allocator > const&, int)”,引用自:main.o 中的 _main “cv::imread(std: :__1::basic_string, std::__1::allocator > const&, int)",引用自:main.o 中的 _main "cv::imshow(std::__1::basic_string, std::__1::allocator > const&, cv::_InputArray const&)”,引用自:main.o 中的 _main ld:未找到架构 x86_64 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)


4

1 回答 1

0

查看 Apple 的使用 Dynamic Libraries 的文档

这些错误告诉您的是,它在链接阶段找不到这些符号的目标代码(实现)。从 Apple 的文档来看,它似乎希望在 /usr/local/lib 而不是 /opt/local/lib 中找到 dylib。

于 2013-08-24T01:20:55.943 回答