MaskRay / ccls

C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting
Apache License 2.0
3.73k stars 254 forks source link

Can not link project on arm #905

Open T0maas opened 1 year ago

T0maas commented 1 year ago

I am trying to build this project on RPI3 (raspberry pi os 32bit). Compiling was successfull, but I've got linker error:

/usr/bin/ld: CMakeFiles/ccls.dir/src/pipeline.cc.o: undefined reference to symbol '__atomic_load_8@@LIBATOMIC_1.0'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/10/libatomic.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ccls.dir/build.make:720: ccls] Error 1
make[1]: *** [CMakeFiles/Makefile2:207: CMakeFiles/ccls.dir/all] Error 2
make: *** [Makefile:149: all] Error 2

I added a line set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic") to the end of CMakeList.txt, but it did not helped, it shows same error.

T0maas commented 1 year ago

There must be problem with order of linking parameters, make VERBOSE=1 showed this

/usr/bin/c++ -O3 -DNDEBUG  -latomic CMakeFiles/ccls.dir/third_party/siphash.cc.o CMakeFiles/ccls.dir/src/clang_tu.cc.o CMakeFiles/ccls.dir/src/config.cc.o CMakeFiles/ccls.dir/src/filesystem.cc.o CMakeFiles/ccls.dir/src/fuzzy_match.cc.o CMakeFiles/ccls.dir/src/main.cc.o CMakeFiles/ccls.dir/src/include_complete.cc.o CMakeFiles/ccls.dir/src/indexer.cc.o CMakeFiles/ccls.dir/src/log.cc.o CMakeFiles/ccls.dir/src/lsp.cc.o CMakeFiles/ccls.dir/src/message_handler.cc.o CMakeFiles/ccls.dir/src/pipeline.cc.o CMakeFiles/ccls.dir/src/platform_posix.cc.o CMakeFiles/ccls.dir/src/platform_win.cc.o CMakeFiles/ccls.dir/src/position.cc.o CMakeFiles/ccls.dir/src/project.cc.o CMakeFiles/ccls.dir/src/query.cc.o CMakeFiles/ccls.dir/src/sema_manager.cc.o CMakeFiles/ccls.dir/src/serializer.cc.o CMakeFiles/ccls.dir/src/test.cc.o CMakeFiles/ccls.dir/src/utils.cc.o CMakeFiles/ccls.dir/src/working_files.cc.o CMakeFiles/ccls.dir/src/messages/ccls_call.cc.o CMakeFiles/ccls.dir/src/messages/ccls_info.cc.o CMakeFiles/ccls.dir/src/messages/ccls_inheritance.cc.o CMakeFiles/ccls.dir/src/messages/ccls_member.cc.o CMakeFiles/ccls.dir/src/messages/ccls_navigate.cc.o CMakeFiles/ccls.dir/src/messages/ccls_reload.cc.o CMakeFiles/ccls.dir/src/messages/ccls_vars.cc.o CMakeFiles/ccls.dir/src/messages/initialize.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_code.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_completion.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_definition.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_did.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_foldingRange.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_formatting.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_document.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_hover.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_references.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_rename.cc.o CMakeFiles/ccls.dir/src/messages/textDocument_signatureHelp.cc.o CMakeFiles/ccls.dir/src/messages/workspace.cc.o -o ccls  -Wl,-rpath,/usr/lib/llvm-11/lib: /usr/lib/llvm-11/lib/libclang-cpp.so.11 /usr/lib/llvm-11/lib/libLLVM-11.so.1 -pthread

I moved -latomic from the beginning to the end after -pthread and it succesfully linked.