LLD - unknown argument: -arch - c++

Trying to link a simple program using LLVM 4.0.0 release (Clang, LLD) on Mac OS Sierra.
Note, this is fully achievable in Linux.
My current path is prefixed with the LLVM's bin directory (i.e. /opt/LLVM/4.0.0/bin:$PATH.
The program (main.cpp) is the simplest possible C++ application:
int main()
{
return 0;
}
The shell command issued is: clang -fuse-ld=lld.
This fails with these errors:
/opt/llvm/4/bin/ld.lld: error: unknown argument: -no_deduplicate
/opt/llvm/4/bin/ld.lld: error: unknown argument: -dynamic
/opt/llvm/4/bin/ld.lld: error: unknown argument: -arch
/opt/llvm/4/bin/ld.lld: error: unknown emulation: acosx_version_min
/opt/llvm/4/bin/ld.lld: error: unable to find library -lto_library
/opt/llvm/4/bin/ld.lld: error: /opt/llvm/4/lib/libLTO.dylib: invalid data encoding
clang-4.0: error: linker command failed with exit code 1 (use -v to see invocation)
Using the -v switch, I see this linker command (formatted):
"/opt/llvm/4/bin/ld.lld" \
-demangle \
-lto_library /opt/llvm/4/lib/libLTO.dylib \
-no_deduplicate \
-dynamic \
-arch x86_64 \
-macosx_version_min 10.12.0 \
-o a.out \
main.o \
-lSystem /opt/llvm/4/bin/../lib/clang/4.0.0/lib/darwin/libclang_rt.osx.a
Does anyone know the proper switches for this platform?

After contacting the LLVM-dev mailing list, it appears that LLD for macOS (meaning, Mach-O object format linking) development is stale.
To use Clang on macOS, it's best to stick with the OS-provided ld64.

If the only reason to use LLVM-lld is speed, then try zld
https://github.com/michaeleisel/zld/
It's consistently cuts time to half (often to less than half) as compared to that taken by Apple-ld.
Add the following linker flag:
-fuse-ld=`which zld` -Wl,-zld_original_ld_path,ld

Related

"Make" fails with Clang error - how do I get the error from Clang?

Main question is: How do I get the clang error out of make?
I have been trying to follow these instructions to install GLEW. On second look I've seen that GLEW might not really be necessary on Mac OS X, but I'd still like to find out how to get the error from the problem I was having. (I am not very experienced with make and could not make any similar online solutions work).
Theoretically I should download GLEW, unzip, and run 'make' in the file. This is the output of make:
$ make
cc -dynamiclib -install_name /usr/local/lib/libGLEW.2.1.0.dylib -current_version 2.1.0 -compatibility_version 2.1 -o lib/libGLEW2.1.0.dylib tmp/darwin/default/shared/glew.o -framework OpenGL
ld: malformed file
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks//OpenGLframework/OpenGL.tbd:4:18: error: unknown enumerated scalar
platform: zippered
^~~~~~~~
file '/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Framework//OpenGL.framework/OpenGL.tbd'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [lib/libGLEW.2.1.0.dylib] Error 1
Make -n shows that this is just the first command and it pretty much immediately fails. I have tried make V=1, make VERBOSE=1, and make SHELL='sh -x', but they don't give me additional detail about the clang error. I've also tried running the cc command with -v:
$ cc -v -dynamiclib -install_name /usr/local/lib/libGLEW.2.1.0.dylib -current_version 2.1.0 -compatibility_version 2.1 -o lib/libGLEW2.1.0.dylib tmp/darwin/default/shared/glew.o -framework OpenGL
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
"Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -dylib -dylib_compatibility_version 2.1 -dylib_current_version 2.1.0 -arch x86_64 -dyib_install_name /usr/local/lib/libGLEW.2.1.0.dylib -macosx_version_min 10.14.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -o lib/libGLEW.2.1.0.dylib tmp/darwin/default/shared/glew.o -framework OpenGL -L/usr/local/lib -lSystem / Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchains/usr/lib/clang/9.1.0/lib/darwin/libclang_rt.osx.a
ld: malformed file
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks//OpenGLframework/OpenGL.tbd:4:18: error: unknown enumerated scalar
platform: zippered
^~~~~~~~
file '/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Framework//OpenGL.framework/OpenGL.tbd'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [lib/libGLEW.2.1.0.dylib] Error 1
I don't think I am actually managing to get the real error out of clang. So how do I do that?
It is
Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -dylib -dylib_compatibility_version 2.1 -dylib_current_version 2.1.0 -arch x86_64 -dyib_install_name /usr/local/lib/libGLEW.2.1.0.dylib -macosx_version_min 10.14.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -o lib/libGLEW.2.1.0.dylib tmp/darwin/default/shared/glew.o -framework OpenGL -L/usr/local/lib -lSystem / Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchains/usr/lib/clang/9.1.0/lib/darwin/libclang_rt.osx.a
command that fails, which is ld, not clang. You can run this command separately to get the same error message.
And
ld: malformed file
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks//OpenGLframework/OpenGL.tbd:4:18: error: unknown enumerated scalar
platform: zippered
^~~~~~~~
file '/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Framework//OpenGL.framework/OpenGL.tbd'
is linker's error message. Unfortunately, I'm not familiar with compilation process on Mac, so can't advice how to fix it.

OS X g++ not finding OpenCV libraries

I have OpenCV 3.3.1 installed on OS 10.13.1 using Homebrew, and I'm getting a linker problem I can't diagnose. Does anyone have a clue what might be going on?
Command line:
g++ backsub.cpp `pkg-config --libs --cflags opencv` -o backsub
Returns the following error message:
ld: library not found for -llibopencv_stitching.3.3.1.dylib
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Using the -v option gives, for the linker section (hard wrapped to make it easier to read):
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.
xctoolchain/usr/bin/ld" -demangle -lto_library
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.
xctoolchain/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch x86_64
-macosx_version_min 10.13.0 -o backsub
-L/usr/local/Cellar/opencv/3.3.1_1/lib
/var/folders/zn/p7grv7lj49lfdrvrtn7mp1kh0000gn/T/backsub-2eda30.o
-llibopencv_stitching.3.3.1.dylib -llibopencv_superres.3.3.1.dylib
-llibopencv_videostab.3.3.1.dylib -llibopencv_photo.3.3.1.dylib
-llibopencv_aruco.3.3.1.dylib -llibopencv_bgsegm.3.3.1.dylib
-llibopencv_bioinspired.3.3.1.dylib -llibopencv_ccalib.3.3.1.dylib
-llibopencv_dpm.3.3.1.dylib -llibopencv_face.3.3.1.dylib
-llibopencv_fuzzy.3.3.1.dylib -llibopencv_img_hash.3.3.1.dylib
-llibopencv_line_descriptor.3.3.1.dylib -llibopencv_optflow.3.3.1.dylib
-llibopencv_reg.3.3.1.dylib -llibopencv_rgbd.3.3.1.dylib
-llibopencv_saliency.3.3.1.dylib -llibopencv_stereo.3.3.1.dylib
-llibopencv_structured_light.3.3.1.dylib
-llibopencv_phase_unwrapping.3.3.1.dylib
-llibopencv_surface_matching.3.3.1.dylib
-llibopencv_tracking.3.3.1.dylib -llibopencv_datasets.3.3.1.dylib
-llibopencv_text.3.3.1.dylib -llibopencv_dnn.3.3.1.dylib
-llibopencv_plot.3.3.1.dylib -llibopencv_xfeatures2d.3.3.1.dylib
-llibopencv_shape.3.3.1.dylib -llibopencv_video.3.3.1.dylib
-llibopencv_ml.3.3.1.dylib -llibopencv_ximgproc.3.3.1.dylib
-llibopencv_calib3d.3.3.1.dylib -llibopencv_features2d.3.3.1.dylib
-llibopencv_highgui.3.3.1.dylib -llibopencv_videoio.3.3.1.dylib
-llibopencv_flann.3.3.1.dylib -llibopencv_xobjdetect.3.3.1.dylib
-llibopencv_imgcodecs.3.3.1.dylib -llibopencv_objdetect.3.3.1.dylib
-llibopencv_xphoto.3.3.1.dylib -llibopencv_imgproc.3.3.1.dylib
-llibopencv_core.3.3.1.dylib -lc++ -lSystem
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.
xctoolchain/usr/lib/clang/9.0.0/lib/darwin/libclang_rt.osx.a
ld: library not found for -llibopencv_stitching.3.3.1.dylib
clang: error: linker command failed with exit code 1 (use -v to see invocation)
pkg-config seems to be doing the right things. All of the dylibs are in /usr/local/Cellar/opencv/3.3.1_1/lib and have the exact filenames specified in the command line. For some reason the linker isn't seeing them. Thanks for any help!

clang: warning: no such sysroot directory: '-mmacosx-version-min=10.5' on compiling LLVM (3.9.0)

I am compiling LLVM (3.9.0) using CMake (3.6.2) on my Mac (OsX) using GCC, but somehow I am getting the following error with following GCC configuration
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
[50%] Building C object projects/compiler-rt/lib/builtins/CMakeFiles/clang_rt.eprintf.dir/eprintf.c.o
clang: warning: no such sysroot directory: '-mmacosx-version-min=10.5'
/Users/Ritzy/llvm_src/llvm-3.9.0.src/projects/compiler-rt/lib/builtins/eprintf.c:14:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
^
1 error generated.
make[2]: *** [projects/compiler-rt/lib/builtins/CMakeFiles/clang_rt.eprintf.dir/eprintf.c.o] Error 1
make[1]: *** [projects/compiler-rt/lib/builtins/CMakeFiles/clang_rt.eprintf.dir/all] Error 2
make: *** [all] Error 2
I am using following CMake command:
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR ..
cmake --build .
I spent hours figuring out what was wrong. Even tried to using gcc6 and clang but in vain.
Here's an example of what the command line flags supplied to a MacOS/X clang invocation might look like:
-pipe -stdlib=libc++ -std=c++11 -stdlib=libc++ -O2 -std=gnu++11 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -mmacosx-version-min=10.7 -Wall -W -fPIC $(DEFINES)
Note in particular this part:
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -mmacosx-version-min=10.7
-isysroot tells the compiler where to look for header files, and then the next argument -mmacosx-version-min=10.7 tells it what minimum version of MacOS/X to maintain backwards compatibility with.
In your case, your CMake invocation probably isn't specifying a value for the -isysroot argument, instead it probably has something like this:
-isysroot -mmacosx-version-min=10.5
... where the path that was intended to be supplied after the -isysroot flag has been left blank (i.e. an empty string) for some reason, and that is why "-mmacosx-version-min=10.5" is being interpreted as a path to look for header files in (which of course will not work).
As to why the path argument was left blank, that is something you'll have to investigate on your own.

linker command failed "ld: library not found for -lOpenNI" in Xcode

I'm trying to use OpenNI with my kinect but I have a problem during the build. I get this error :
ld: library not found for -lOpenNI
clang: error: linker command failed with exit code 1 (use -v to see invocation)
When I try "ld -lOpenNI" in terminal it finds it, and the path to the libOpenNI.dylib has been added to the library search paths (it's just /usr/lib). It has also been linked in "link binary With Libraries". I have tried to clean the build folder.
The whole compiler argument is :
Ld /Users/henrax/Library/Developer/Xcode/DerivedData/handtracker-dafbaeqppvdfnfhgffkyffwhskyl/Build/Products/Debug/handtracker normal x86_64
cd /Users/henrax/Documents/handtracker
export MACOSX_DEPLOYMENT_TARGET=10.11
/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.11.sdk -L/Users/henrax/Library/Developer/Xcode/DerivedData/handtracker-dafbaeqppvdfnfhgffkyffwhskyl/Build/Products/Debug -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib -F/Users/henrax/Library/Developer/Xcode/DerivedData/handtracker-dafbaeqppvdfnfhgffkyffwhskyl/Build/Products/Debug -filelist /Users/henrax/Library/Developer/Xcode/DerivedData/handtracker-dafbaeqppvdfnfhgffkyffwhskyl/Build/Intermediates/handtracker.build/Debug/handtracker.build/Objects-normal/x86_64/handtracker.LinkFileList -mmacosx-version-min=10.9 -stdlib=libc++ -framework GLUT -framework OpenGL /Applications/Kinect/OpenNI-Bin-Dev-MacOSX-v1.5.7.10/Samples/NiHandTracker/x64-Release/NiHandTracker.o /Applications/Kinect/OpenNI-Bin-Dev-MacOSX-v1.5.7.10/Samples/NiHandTracker/x64-Release/NiHandViewer.o /Applications/Kinect/OpenNI-Bin-Dev-MacOSX-v1.5.7.10/Samples/NiHandTracker/x64-Release/NiSimpleViewer.o -lOpenNI -lOpenNI.jni /Applications/Kinect/OpenNI-Bin-Dev-MacOSX-v1.5.7.10/Samples/NiHandTracker/x64-Release/main.o -Xlinker -dependency_info -Xlinker /Users/henrax/Library/Developer/Xcode/DerivedData/handtracker-dafbaeqppvdfnfhgffkyffwhskyl/Build/Intermediates/handtracker.build/Debug/handtracker.build/Objects-normal/x86_64/handtracker_dependency_info.dat -o /Users/henrax/Library/Developer/Xcode/DerivedData/handtracker-dafbaeqppvdfnfhgffkyffwhskyl/Build/Products/Debug/handtracker
It seems like a pretty easy problem but I have searched and not found any solution. Any help would be very welcomed !

Can't start SFML app on Xcode

Installed SFML on Mac OS according to tutorial http://www.sfml-dev.org/tutorials/2.0/start-osx.php (Xcode 6.1), it's kinda worked, so I can create SMFL app, but when i try to build that standart project it comes with the following error
Ld /Users/andreybondar/Library/Developer/Xcode/DerivedData/Test-draycgeyywzpqjgugruuudxcdqqj/Build/Intermediates/Test.build/Debug/Test.build/Objects-normal/x86_64/Test normal x86_64
cd /Users/andreybondar/Desktop/Test
export MACOSX_DEPLOYMENT_TARGET=10.10
/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.10.sdk -L/Users/andreybondar/Library/Developer/Xcode/DerivedData/Test-draycgeyywzpqjgugruuudxcdqqj/Build/Products/Debug -L/usr/local/lib -F/Users/andreybondar/Library/Developer/Xcode/DerivedData/Test-draycgeyywzpqjgugruuudxcdqqj/Build/Products/Debug -F/Library/Frameworks -filelist /Users/andreybondar/Library/Developer/Xcode/DerivedData/Test-draycgeyywzpqjgugruuudxcdqqj/Build/Intermediates/Test.build/Debug/Test.build/Objects-normal/x86_64/Test.LinkFileList -mmacosx-version-min=10.10 -frameworksfml-system -frameworksfml-window -frameworksfml-graphics -frameworksfml-audio -frameworksfml-network -stdlib=libc++ -fobjc-link-runtime -Xlinker -dependency_info -Xlinker /Users/andreybondar/Library/Developer/Xcode/DerivedData/Test-draycgeyywzpqjgugruuudxcdqqj/Build/Intermediates/Test.build/Debug/Test.build/Objects-normal/x86_64/Test_dependency_info.dat -o /Users/andreybondar/Library/Developer/Xcode/DerivedData/Test-draycgeyywzpqjgugruuudxcdqqj/Build/Intermediates/Test.build/Debug/Test.build/Objects-normal/x86_64/Test
clang: error: unknown argument: '-frameworksfml-system'
clang: error: unknown argument: '-frameworksfml-window'
clang: error: unknown argument: '-frameworksfml-graphics'
clang: error: unknown argument: '-frameworksfml-audio'
clang: error: unknown argument: '-frameworksfml-network'
So, what I should do to make it work, cause i already tried to manually put all SFML files in their directories, and don't know what else I can do.
You are reading the old version of the tutorial. Read the ones for SFML 2.1 instead. One of the differences is this message:
If you have Xcode 5, you must use the new version of the templates.
which is available on the download page. Long story short, this update of the template fixes a regression introduced in Xcode 5 and later.
source