Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ld: library not found for -lintl (macOS with Macports) #43

Open
rafi opened this issue Feb 2, 2018 · 6 comments
Open

ld: library not found for -lintl (macOS with Macports) #43

rafi opened this issue Feb 2, 2018 · 6 comments

Comments

@rafi
Copy link

rafi commented Feb 2, 2018

Since commit 45676e7 I'm receiving an error while compiling cpsm with Python3 support:
(I'm using macOS with Macports, and not Homebrew)

$ PY3=ON ./install.sh

Python 3 selected by PY3=ON
-- The C compiler identification is AppleClang 9.0.0.9000039
-- The CXX compiler identification is AppleClang 9.0.0.9000039
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Boost version: 1.65.1
-- Found the following Boost libraries:
--   program_options
-- Found PythonInterp: /opt/local/bin/python3 (found suitable version "3.6.4", minimum required is "3")
-- Found PythonInterp: /opt/local/bin/python3 (found version "3.6.4")
-- Found PythonConfig: -I/opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -I/opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m; -L/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/config-3.6m-darwin -lpython3.6m -lintl -ldl -framework CoreFoundation
-- Found ICU header files in /opt/local/include
-- Found ICU libraries: /opt/local/lib/libicuuc.dylib
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/rafi/.cache/vim/dein/repos/github.com/nixprime/cpsm/build
Scanning dependencies of target cpsm_core
[ 11%] Building CXX object CMakeFiles/cpsm_core.dir/src/str_util.cc.o
[ 22%] Linking CXX static library libcpsm_core.a
[ 22%] Built target cpsm_core
Scanning dependencies of target cpsm_cli
[ 33%] Building CXX object CMakeFiles/cpsm_cli.dir/src/cpsm_cli_main.cc.o
[ 44%] Linking CXX executable cpsm_cli
[ 44%] Built target cpsm_cli
Scanning dependencies of target cpsm_py
[ 55%] Building CXX object CMakeFiles/cpsm_py.dir/src/ctrlp_util.cc.o
[ 66%] Building CXX object CMakeFiles/cpsm_py.dir/src/python_extension.cc.o
[ 77%] Linking CXX shared library cpsm_py.so
ld: library not found for -lintl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [cpsm_py.so] Error 1
make[1]: *** [CMakeFiles/cpsm_py.dir/all] Error 2
make: *** [all] Error 2
@nixprime
Copy link
Owner

nixprime commented Feb 6, 2018

I can reproduce this. Still thinking about how to fix it.

python-config is officially recommended over distutils.sysconfig for configuring linking against Python, and the major difference between python-config and the previous distutils.sysconfig-based approach - the addition of $LIBS - was needed to fix #35 by linking against libutil.

In this case, MacPorts links Python against libintl, which is part of gettext, but doesn't put libintl anywhere the system linker will look for it:

$ otool -L /opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/config-3.6m-darwin/libpython3.6.dylib
...
    	/opt/local/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.5.0)

As a workaround you can sudo ln -s /opt/local/lib/libintl.8.dylib /usr/local/lib/libintl.8.dylib.

@rafi
Copy link
Author

rafi commented Feb 9, 2018

Thanks for the detailed explanation. I've tried symlinking as a work-around, but still getting the same error unfortunately.

@jdsutherland
Copy link

Same issue though I'm using homebrew

@jdsutherland
Copy link

It seems my issue was related to using asdf version manager. I tried using homebrew python and the build succeeded.

@metalelf0
Copy link

Same here. I'm using python 3.8.6, installed via pyenv on macOS. I tried reinstalling with env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.8.6, but running ./install.sh fails with the same output:

Python 3 selected by PY3=ON
-- The C compiler identification is AppleClang 12.0.5.12050022
-- The CXX compiler identification is AppleClang 12.0.5.12050022
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Found Boost: /usr/local/include (found version "1.67.0") found components: program_options 
-- Found PythonInterp: /Users/metalelf0/.pyenv/shims/python3 (found suitable version "3.8.6", minimum required is "3") 
-- Found PythonInterp: /Users/metalelf0/.pyenv/shims/python3 (found version "3.8.6") 
-- Found PythonConfig: -I/Users/metalelf0/.pyenv/versions/3.8.6/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8 -I/Users/metalelf0/.pyenv/versions/3.8.6/include/python3.8; -L/Users/metalelf0/.pyenv/versions/3.8.6/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/config-3.8-darwin -lpython3.8 -lintl -ldl -framework CoreFoundation  
-- Optional package ICU was not found
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/metalelf0/.local/share/nvim/site/pack/packer/start/cpsm/build
[ 11%] Building CXX object CMakeFiles/cpsm_core.dir/src/str_util.cc.o
[ 22%] Linking CXX static library libcpsm_core.a
[ 22%] Built target cpsm_core
[ 33%] Building CXX object CMakeFiles/cpsm_cli.dir/src/cpsm_cli_main.cc.o
[ 44%] Linking CXX executable cpsm_cli
[ 44%] Built target cpsm_cli
[ 55%] Building CXX object CMakeFiles/cpsm_py.dir/src/ctrlp_util.cc.o
[ 66%] Building CXX object CMakeFiles/cpsm_py.dir/src/python_extension.cc.o
[ 77%] Linking CXX shared library cpsm_py.so
ld: library not found for -lintl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [cpsm_py.so] Error 1
make[1]: *** [CMakeFiles/cpsm_py.dir/all] Error 2
make: *** [all] Error 2

The gettext library that provides libintl is installed via homebrew (I also tried reinstalling and relinking it without success).

@jdsutherland how did you use homebrew python? You installed it and started a shell without loading pyenv, or manually provided some env vars to the install.sh script?

@dnicolson
Copy link

The issue with pyenv may be fixed in v2.3.2 via adding the Homebrew LDFLAGS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants