簡體   English   中英

dyld:未找到符號:在MAC OS 10.10上運行簡單代碼時,__ ZN2cv6imreadERKNSt3

[英]dyld: Symbol not found: __ZN2cv6imreadERKNSt3 when run a simple code on MAC OS 10.10

我正在嘗試在MAC OS 10.10上運行以下代碼:

#include <cv.h>    
#include <highgui.h>    

using namespace std;
using namespace cv;

int main() 
{
    Mat img = imread("xxx.jpg");
    imshow("image", img);
    waitKey(0);

    return 0;
}

此代碼可以成功構建。 但是,當我運行它時,總是收到錯誤消息:

dyld: lazy symbol binding failed: Symbol not found: 
__ZN2cv6imreadERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEi
Referenced from:    
/Users/Coldmoon/ComputerVisionApps/opencvTest/Build/Products/Debug/opencvTest
Expected in: /usr/local/lib/libopencv_highgui.2.4.dylib

我有兩個不同版本的opencv。 一個是使用libstdc++構建的,另一個是使用libc++構建的。 兩者都是opencv 2.4.9。 我想使用libc++ opencv構建以上代碼。

因此,在Xcode 6.1中,我將Header Search PathLibrary Search Path為指向/Users/Coldmoon/MyLibraries/opencv-2.4.9 libc++ opencv,並將C++ Standard Library設置為libc++

我的問題:似乎編譯器沒有鏈接libc++ opencv,而是鏈接了libstdc++ opencv,它位於/usr/local/lib

我很困惑。 我有什么想念的嗎?

Library Search Paths告訴鏈接器在何處搜索要鏈接到的庫。 但是當可執行文件運行時,動態加載程序( dyld )可能會在不同位置搜索該庫。 這由庫的“安裝名稱”控制,可以由otool -D libFoo.dylib查詢。

因此,例如,如果要鏈接的庫位於/bar/libFoo.dylib ,但其安裝名稱為/baz/libFoo.dylib ,則需要將/bar放入“ Library Search Paths ,但是在運行二進制文件時它將在/baz進行搜索。

當可執行文件由otool -L <executable>運行時,您還可以找出在哪里找到了庫。

如果共享庫的路徑不是絕對路徑,則動態加載程序會嘗試從某些標准路徑加載它。 如果設置DYLD_PRINT_LIBRARIES環境變量,則dyld將記錄它嘗試加載到stderr的庫的文件名。 您可以通過設置DYLD_LIBRARY_PATH變量( :分隔的路徑列表)來覆蓋dyld搜索庫的路徑。

有關dyld環境變量的更多信息,請參見man dyld

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM