使用Xcode添加和使用动态库

时间:2013-08-03 21:39:27

标签: xcode opencv linker mach-o dynamic-library

确定。所以这里。我目前正在尝试添加和使用名为OpenCV的动态库到我的Xcode项目中。我首先使用.pkg安装了MacPorts。然后我打开终端并运行" sudo port install opencv"。然后MacPorts安装了各种依赖项(FFMPEG / etc),然后将OpenCV安装到" / opt / local / lib" .dylib文件的文件夹和" / opt / local / include"头文件的文件夹。然后我打开Xcode并打开命令行实用程序项目。我在我的项目中添加了一个组,然后在其中添加了所有的.dylib文件(我认为它们被称为动态库的引用,但我不确定 - 我是一个初学者 - 我学习了C ++,我的第一个编程语言,仅一周前")。之后,我点击了Xcode内部的项目文件,然后转到Build Settings,然后更改了#34; Header Search Paths"在"搜索路径"选项卡到我之前提到的/ 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的错误************************** *******************

Stupid Stack Overflow不允许我发布图片,所以这里是错误照片的链接: enter image description here

<*****> *****************阻止结束*************************** ************************************ 所以,是的,我不知道我现在在做什么,完全迷失了。我没有按照向项目添加动态库的正确步骤吗?哦,我忘了它是什么,但我不知怎的让Xcode忽略了那些语义问题(我不记得我是怎么做的,或者这就是我做的),但一旦语义问题被忽略,唯一的错误似乎仍然存在与&#34; Mach-O Linker Error&#34;相关的东西它说的是:&#34;未定义的符号.... architecture / etc&#34;然后说未定义的符号是我在main.cpp文件中调用的库函数之一。但是由于我删除了所有内容并重新开始,因此不再出现该错误。所以现在我得到的唯一错误就是图片中的错误。所以请帮助!!!!我绝对迷失了,我已经研究了几个星期,但我认为我的问题是我不知道我在寻找什么或者我应该问什么问题。我上面列出的步骤只是我所做的。任何见解都将非常感激。感谢提前!!!!!!

____________ EDIT___________________ 所以我再次重复上述步骤,但这次我收到此错误: Ld / Users / Yash / Library / Developer / Xcode / DerivedData / OpenCVOptTEST-adchdkiefzmijfhahwtzcfqarzkw / Build / Products / Debug / OpenCVOptTEST normal x86_64     cd&#34; / Users / Yash / Coding Folder / OpenCVOptTEST&#34;     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 /建造/产品/调试/ OpenCVOptTEST

架构x86_64的未定义符号:   &#34; cv :: namedWindow(std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt; const&amp;,int)&#34;,引自:       _main在main.o中   &#34; cv :: imread(std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt; const&amp;,int)&#34;,引自:       _main在main.o中   &#34; cv :: imshow(std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt; const&amp;,cv :: _ InputArray const&amp;)&#34;,引自:       _main在main.o中 ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)


1 个答案:

答案 0 :(得分:0)

查看Apple的documentation for working with Dynamic Libraries

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