2017-07-18 52 views
2

對於安裝dlib,我遵循本教程:http://www.pyimagesearch.com/2017/03/27/how-to-install-dlib/。 我使用Mac OS X 10.12.5並使用Python 3.5。 我跑CMake - 安裝問題製作包

$ brew install cmake 
$ brew install boost 
$ brew install boost-python --with-python3 

它工作沒有任何錯誤。
但是,當我嘗試安裝dlib與pip安裝dlib。我有一個錯誤:

The C compiler 
    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc" 
    is not able to compile a simple test program. 
error: cmake configuration failed 

ld: can't map file, errno=22 file '/usr/local/opt/qt/lib' for architecture x86_64 

對於完整的錯誤,請此鏈接查看(不想要粘貼完整的錯誤): https://gist.github.com/alexattia/3e98685310d90b65031db640d3ea716a

折回的錯誤,當我試圖讓後DLIB手動,我有這樣的:

Linking C executable cmTC_05e45 

    /usr/local/Cellar/cmake/3.8.2/bin/cmake -E cmake_link_script 
    CMakeFiles/cmTC_05e45.dir/link.txt --verbose=1 


    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc 
    -Wl,-search_paths_first -Wl,-headerpad_max_install_names 
    /usr/local/opt/qt/lib CMakeFiles/cmTC_05e45.dir/testCCompiler.c.o -o 
    cmTC_05e45 

爲全面跟蹤擴展:https://gist.github.com/alexattia/1e54ffb87c9eb4c811033f5cadd90331

我重新安裝的XCode(從蘋果商店)和CMake(3.8.2從下載的頁面),我甚至安裝了Qt Creator以擁有一個乾淨的Qt版本,但我仍然有同樣的錯誤。
我試圖用conda安裝它,但安裝後,我仍然沒有在Python中的模塊。

非常感謝您的幫助。

+0

而你的具體*問題是 - 什麼? –

+0

我該如何解決這個問題以安裝dlib? –

+1

您的日誌中的關鍵錯誤行是'ld:無法映射文件,errno = 22文件'/ usr/local/opt/qt/lib'用於體系結構x86_64'(也就是說,該行在問題中應該是**發佈**本身)。有人將'/ usr/local/opt/qt/lib'目錄傳遞給鏈接器,鏈接器將其視爲鏈接的文件。可能你有一個環境變量來指定它。 – Tsyvarev

回答

1

你的評論:

事實上,在我的.bash_profile,我有出口LDFLAGS = 「在/ usr /本地的/ opt/QT/lib目錄」, 出口CPPFLAGS =「在/ usr /本地/ opt/qt/include「,export PATH =」/ usr/local/opt/qt/bin:$ PATH「。 但即使在評論它,我仍然有同樣的錯誤

分配給你的既不LDFLAGSCPPFLAGS是有道理的,和 第一個是使鏈接失敗你關注。

環境變量LDFLAGS的值(如果設置)由構建系統 解釋爲鏈接選項。同樣,如果設置,環境變量 CPPFLAGS的值被解釋爲預處理器選項。

/usr/local/opt/qt/lib不是聯動選項而/usr/local/opt/qt/include 不是預處理器選項。這些只是目錄名稱。您傳遞給不是選項的鏈接器(或預處理器或編譯器)的任何參數 被作爲輸入文件的工具置於 之間。因此,您已經使鏈接器相信 /usr/local/opt/qt/lib是您的鏈接的輸入文件。

ld: can't map file, errno=22 file '/usr/local/opt/qt/lib' for architecture x86_64 

是當它發現/usr/local/opt/qt/lib不是 一個文件中的所有鏈接的話。

大概,您希望指示鏈接器/usr/local/opt/qt/lib是 它應該在其中搜索鏈接所需的庫的目錄。 表達這一意圖是聯動選項:

-L/usr/local/opt/qt/lib 

這裏是GCC options for linking

同樣你打算指示該預處理程序,/usr/local/opt/qt/include 是它要搜索的頭文件的目錄。預處理 選項來表達就是:

-I/usr/local/opt/qt/include 

這裏是GCC options for preprocessing

這是不正常的,不宜在你的bash登錄配置文件來指定編譯或鏈接選項 ,因爲你在做什麼。在構建系統的輸入文件(makefile,cmakelists文件或類似文件)中指定這些選項,或者作爲構建系統配置的參數。但是,如果你堅持在 您的bash登錄配置文件中指定它們,那麼你應該指定:

LDFLAGS=-L/usr/local/opt/qt/lib 
CPPFLAGS=-I/usr/local/opt/qt/include 

一旦您已在bash_profile使這些環境設置,他們將 只需要在新的登錄shell效果。

+0

非常感謝您的解釋。有效! 你說過:「在你的bash登錄配置文件中指定編譯或鏈接選項是不正常和不合適的,就像你正在做的那樣。」什麼是可取的?如何找到在配置文件中使用的輸入文件? –

0

我有類似的問題,但發現它是由於提振。

試試這個。

brew uninstall boost-python 
    brew uninstall boost 
    brew install boost-python --with-python3 --without-python 
    pip3 install dlib 
+0

謝謝,但它不起作用。我仍然有同樣的錯誤。 對於體系結構,ld:無法映射文件,errno = 22文件'/ usr/local/opt/qt/lib' x86_64' –