A. Attia
A. Attia

Reputation: 1720

CMake - Installing issues to make package

For installing dlib, I followed this tutorial : http://www.pyimagesearch.com/2017/03/27/how-to-install-dlib/. I am on Mac OS X 10.12.5 and using Python 3.5. I run

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

It works without any error.
But when I try to install dlib with pip install dlib. I have an error :

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

For the full error, please see on this link (doesn't want to paste the full error) : https://gist.github.com/alexattia/3e98685310d90b65031db640d3ea716a

After retracing the error, when I tried to make dlib manually, I have this :

  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

For the full trace expand : https://gist.github.com/alexattia/1e54ffb87c9eb4c811033f5cadd90331

I reinstalled XCode (from Apple Store) and CMake (3.8.2 from the downloaded page), I even installed Qt Creator to have a clean version of Qt, but I still have the same error.
I tried to install it with conda but after the installation, I still don't have the module in python.

Thank you very much for any help.

Upvotes: 2

Views: 658

Answers (2)

Mike Kinghan
Mike Kinghan

Reputation: 61137

You commented:

Indeed, in my .bash_profile, I have export LDFLAGS="/usr/local/opt/qt/lib", export CPPFLAGS="/usr/local/opt/qt/include", export PATH="/usr/local/opt/qt/bin:$PATH". But even while commenting it, I still have the same error

Neither of your assignments to LDFLAGS or CPPFLAGS makes sense, and the first one is the cause the linker failure that concerns you.

The value of the environment variable LDFLAGS, if set, is interpreted by your build system as linkage options. Likewise The value of the environment variable CPPFLAGS, if set, is interpreted as preprocessor options.

/usr/local/opt/qt/lib is not a linkage option and /usr/local/opt/qt/include is not a preprocessor option. These are simply directory names. Any argument that you pass to the linker (or preprocessor, or compiler) that is not an option is interpeted by the tool as an input file. Thus you have led the linker to believe that /usr/local/opt/qt/lib is an input file to your linkage.

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

is what the linker says when it discovers that /usr/local/opt/qt/lib is not a file at all.

Presumably, you wish to instruct the linker that /usr/local/opt/qt/lib is a directory in which it should search for libraries required by your linkage. The linkage option that expresses that intent is:

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

Here are the GCC options for linking

Similarly you intend to instruct that preprocessor that /usr/local/opt/qt/include is a directory in which it should search for header files. The preprocessor option to express that is:

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

Here are the GCC options for preprocessing

It is abnormal and inadvisable to specify compilation or linkage options in your bash login profile, as you are doing. Specify such options in the build system's input files (makefile, cmakelists file or similar), or as arguments to the build system's configuration. But if you insist on specifying them in your bash login profile, then you should specify:

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

And once you have made these environment settings in your bash_profile they will only take effect in new login shells.

Upvotes: 1

Ankur Jain
Ankur Jain

Reputation: 507

I had a similar issue but found out it was due to boost.

Try this.

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

Upvotes: 0

Related Questions