Linking CXX shared library - cmake

I'm trying to get Utopia Documents installed from source.. Have managed to get all the dependencies and stuff sorted out and am only left with this nasty dynamic linking (CMake) error :
Linking CXX shared library ../../../Utopia.app/Contents/Libraries/libutopia2_qt.dylib
Linking CXX shared library ../../../Utopia.app/Contents/Libraries/libutopia2_auth.dylib
Linking CXX shared library ../../Utopia.app/Contents/Libraries/libcrackle.dylib
[ 44%] Built target utopia2_qt
make: *** [all] Error 2
make[1]: *** [CMakeFiles/cmTryCompileExec3810696602.dir/CheckSymbolExists.cxx.o] Error 1
make: *** [cmTryCompileExec3810696602/fast] Error 2

Related

Linker fails building library with CMake

I'm trying to build LUAGLM (from https://github.com/gottfriedleibniz/lua) to bind GLM library to give access in Lua using cmake. When i build, the building completes ok but the linker does not giving error:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [glm.so] Error 1
make[1]: *** [CMakeFiles/glm.dir/all] Error 2
make: *** [all] Error 2
Above these lines there is a very long list starting with:
[ 10%] Building CXX object CMakeFiles/liblua.dir/onelua.c.o
[ 20%] Linking CXX shared library liblua54.dylib
[ 20%] Built target liblua
[ 30%] Building CXX object CMakeFiles/liblua_static.dir/onelua.c.o
[ 40%] Linking CXX static library liblua54_static.a
[ 40%] Built target liblua_static
[ 50%] Building C object CMakeFiles/lua.dir/lua.c.o
[ 60%] Linking CXX executable lua
[ 60%] Built target lua
[ 70%] Building CXX object CMakeFiles/luac.dir/onelua.c.o
[ 80%] Linking CXX executable luac
[ 80%] Built target luac
[ 90%] Building CXX object CMakeFiles/glm.dir/libs/glm_binding/lglmlib.cpp.o
[100%] Linking CXX shared module glm.so
Undefined symbols for architecture x86_64:
"glm_pushmat(lua_State*, glmMatrix const&)", referenced from:
glm_mat_add(lua_State*) in lglmlib.cpp.o
glm_mat_sub(lua_State*) in lglmlib.cpp.o
glm_mat_mul(lua_State*) in lglmlib.cpp.o
glm_mat_negate(lua_State*) in lglmlib.cpp.o
glm_mix(lua_State*) in lglmlib.cpp.o
glm_saturation(lua_State*) in lglmlib.cpp.o
glm_orthonormalize(lua_State*) in lglmlib.cpp.o
...
I'm on MacOS Intel (i386-apple-darwin11.3.0)
Not sure where to go next, do I need to edit the CMakeList somehow?
Any help much appreciated
EDIT:
The cmake error log contains the following :
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed. Compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc Build flags: Id flags:
The output was: 1 ld: library not found for -lSystem clang: error: linker command failed with exit code 1 (use -v to see invocation)
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed. Compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ Build flags: Id flags:
The output was: 1 ld: library not found for -lc++ clang: error: linker command failed with exit code 1 (use -v to see invocation)
This is actually a bug in the CMakeList.txt because the library-list for the glm.so module does not contain the liblua.
If you apply the following patch
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8cf8a1a6..6eda2a17 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
## -940,7 +940,7 ## ENDIF()
ADD_LIBRARY(glm MODULE ${SRC_LIBGLM})
TARGET_INCLUDE_DIRECTORIES(glm PRIVATE ${INCLUDE_DIRECTORIES})
-TARGET_LINK_LIBRARIES(glm PRIVATE ${LIBS})
+TARGET_LINK_LIBRARIES(glm PRIVATE ${LIBS} liblua_static)
IF( LUA_BUILD_AS_DLL )
TARGET_LINK_LIBRARIES(glm PUBLIC ${interpretor_target})
TARGET_COMPILE_DEFINITIONS(glm PRIVATE LUA_BUILD_AS_DLL)
to the freshly cloned repository and then do (inside the cloned repository):
git submodule update --init
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DONE_LUA=ON ..
make
you should find the files glm.so, lua and luac in your build directory. At least that worked on my Intel MacBook.
Using liblua_static in the CMakeList.txt for the library glm makes sure, that the resulting glm.so does not need the liblua dynamic library but contains the required code statically. That avoids problems when loading glm.so and the liblua library not being in the library path.
I opened an issue in the GitHub repository for it. So hopefully it will get fixed for everybody soon.
Usually it'll be something like -lYourLibrary not found, if -lSystem for example is not found, try adding it to your CMakeLists.
Are you still having the issue?

make: have built target; make install : *** No rule to make target 'install'

In Ubuntu20.04.
I want to insatll easy3d, but I can not make install it successfully.
make
[ 83%] Building CXX object CMakeFiles/easy3d.dir/surface_mesh_io_obj.cpp.o
[ 87%] Building CXX object CMakeFiles/easy3d.dir/surface_mesh_io_off.cpp.o
[ 91%] Building CXX object CMakeFiles/easy3d.dir/surface_mesh_io_ply.cpp.o
[ 95%] Building CXX object CMakeFiles/easy3d.dir/transform.cpp.o
[100%] Linking CXX static library libeasy3d.a
[100%] Built target easy3d
And the build have files:
CMakeCache.txt CMakeFiles Makefile cmake_install.cmake libeasy3d.a
Then I excute the command make install, I got
make: *** No rule to make target 'install'. Stop.
How could I fix it
I made a big mistake that is nothing to install.

Trouble with simple CMAKE tutorial

I just followed the simple CMake tutorial on youtube
https://www.youtube.com/watch?v=V1YP7eJHDJE
As you can see through the youtube,
folder directory is
CMAKE-GOOD
-build
-CMakeLists.txt
-main.cpp
this is CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(MyProject VERSION 1.0.0)
add_executable(cmake-good main.cpp)
this is main.cpp
#include <iostream>
int main()
{
std::cout << "hello, world! \n";
}
it is the only source code that I wrote.
and from this part, this will be covered my errors that I encountered
edit) I also did the cmake .. in the build directory
the result was shown in below
(base) bmssa#bmssa:~/Desktop/CMake_tutorial/CMAKE-GOOD/build$ cmake ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /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: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bmssa/Desktop/CMake_tutorial/CMAKE-GOOD/build
when I type cmake --build . in ~Desktop/CMake_tutorial_CMAKE_GOOD/build, it shows an Error with
(base) bmssa#bmssa:~/Desktop/CMake_tutorial/CMAKE-GOOD/build$ cmake --build .
[ 50%] Linking CXX executable cmake-good
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
CMakeFiles/cmake-good.dir/build.make:96: recipe for target 'cmake-good' failed
make[2]: *** [cmake-good] Error 1
CMakeFiles/Makefile2:82: recipe for target 'CMakeFiles/cmake-good.dir/all' failed
make[1]: *** [CMakeFiles/cmake-good.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2
as I heard cmake --build . is similar to make,
so I tried make and it shows an error like this
(base) bmssa#bmssa:~/Desktop/CMake_tutorial/CMAKE-GOOD/build$ make
[ 50%] Linking CXX executable cmake-good
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
CMakeFiles/cmake-good.dir/build.make:96: recipe for target 'cmake-good' failed
make[2]: *** [cmake-good] Error 1
CMakeFiles/Makefile2:82: recipe for target 'CMakeFiles/cmake-good.dir/all' failed
make[1]: *** [CMakeFiles/cmake-good.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2
when I type cmake --version,
cmake version 3.20.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).
Can you please help me how to fix it?
I couldn't do anything because I can't even solve this one simple error in the very easy tutorial.
Please HELP ME PLEASE
Thank you
ps.
Because I don't even know what is an error in CMake, could you tell me what should I type in google to solve this?
recipe for taget?
recipe for target 'all' failed?
I don't know what should I type in google....
edit2) I also did the cmake -S . -B build/foobar and cmake --build build/foobar and this also shows the similar Error like this
(base) bmssa#bmssa:~/Desktop/CMake_tutorial/CMAKE-GOOD$ cmake -S . -B build/foobar
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /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: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bmssa/Desktop/CMake_tutorial/CMAKE-GOOD/build/foobar
(base) bmssa#bmssa:~/Desktop/CMake_tutorial/CMAKE-GOOD$ cmake --build build/foobar
[ 50%] Building CXX object CMakeFiles/cmake-good.dir/main.cpp.o
[100%] Linking CXX executable cmake-good
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
CMakeFiles/cmake-good.dir/build.make:96: recipe for target 'cmake-good' failed
make[2]: *** [cmake-good] Error 1
CMakeFiles/Makefile2:82: recipe for target 'CMakeFiles/cmake-good.dir/all' failed
make[1]: *** [CMakeFiles/cmake-good.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2
Here is my guess to your problem. CMake is unable to find a working toolchain (Compiler, linker, etc.)
Try helping it out by specifying the environment variables CC and CXX.
https://cmake.org/cmake/help/latest/envvar/CXX.html
https://cmake.org/cmake/help/latest/envvar/CC.html
export CC = /foobar/...../gcc
export CXX = /foobar/...../g++
For future reference here is how CMake finds compilers (according to a CMake dev)
CMAKE_TOOLCHAIN_FILE (if provided)
CMAKE_LANG_COMPILER (if provided)
The environment variables CC or CXX (if provided)
Then it searches the path environment variable to see if it can find anything.
I guess in your situation none of the above worked. So setting CC and CXX fixed it.

Difficulty Compiling c2ffi on FreeBSD 12 and Debian 10

I am having problems installing c2ffi (https://github.com/rpav/c2ffi) on both FreeBSD 12 and Debian 10. I need c2ffi in order to use some Common Lisp bindings that rely on c2ffi.
On FreeBSD 12, I have both Clang 6.0 (default) and 10.0 installed; c2ffi requires LLVM 10.0. Because cc and c++ refer to Clang 6.0 in my FreeBSD installation, I set PATH to /usr/local/llvm10/bin:$PATH, and I also set aliases to refer to clang and clang++. I have cmake version 3.17.3 installed. However, when I make it to the make phase of installing c2ffi, I run into the following error:
Scanning dependencies of target c2ffi
[ 7%] Building CXX object CMakeFiles/c2ffi.dir/src/AST.cpp.o
[ 15%] Building CXX object CMakeFiles/c2ffi.dir/src/Decl.cpp.o
[ 23%] Building CXX object CMakeFiles/c2ffi.dir/src/Expr.cpp.o
[ 30%] Building CXX object CMakeFiles/c2ffi.dir/src/OutputDriver.cpp.o
[ 38%] Building CXX object CMakeFiles/c2ffi.dir/src/Template.cpp.o
[ 46%] Building CXX object CMakeFiles/c2ffi.dir/src/Type.cpp.o
[ 53%] Building CXX object CMakeFiles/c2ffi.dir/src/c2ffi.cpp.o
[ 61%] Building CXX object CMakeFiles/c2ffi.dir/src/drivers/JSON.cpp.o
/home/michael/c2ffi/src/drivers/JSON.cpp:36:26: warning: passing an object that
undergoes default argument promotion to 'va_start' has undefined behavior
[-Wvarargs]
va_start(ap, close);
^
/home/michael/c2ffi/src/drivers/JSON.cpp:32:61: note: parameter of type 'bool'
is declared here
void write_object(const char *type, bool open, bool close, ...) {
^
1 warning generated.
[ 69%] Building CXX object CMakeFiles/c2ffi.dir/src/drivers/Null.cpp.o
[ 76%] Building CXX object CMakeFiles/c2ffi.dir/src/drivers/Sexp.cpp.o
[ 84%] Building CXX object CMakeFiles/c2ffi.dir/src/init.cpp.o
[ 92%] Building CXX object CMakeFiles/c2ffi.dir/src/options.cpp.o
[100%] Linking CXX executable bin/c2ffi
/usr/bin/ld: error: unable to find library -lclang-cpp
c++: error: linker command failed with exit code 1 (use -v to see invocation)
*** Error code 1
Stop.
make[2]: stopped in /usr/home/michael/c2ffi/build
*** Error code 1
Stop.
make[1]: stopped in /usr/home/michael/c2ffi/build
*** Error code 1
Stop.
make: stopped in /usr/home/michael/c2ffi/build
The file libclang-cpp.so is present in my /usr/local/llvm10/lib directory, but cmake does not detect it. I tried various other approaches, including setting the LD_LIBRARY_PATH and CMAKE_LIBRARY_PATH environment variables, but to no avail; I received the same error message as above.
I gave up installing c2ffi on FreeBSD and tried installing it on a fresh install of Debian 10 with LLVM 10.0 and cmake 3.18.1. However, when I ran make on Debian, I ended up with the following error message:
[ 7%] Building CXX object CMakeFiles/c2ffi.dir/src/AST.cpp.o
/home/michael/c2ffi/src/AST.cpp:24:10: fatal error: 'clang/AST/ASTConsumer.h' file not found
#include <clang/AST/ASTConsumer.h>
^~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/c2ffi.dir/build.make:82: CMakeFiles/c2ffi.dir/src/AST.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:123: CMakeFiles/c2ffi.dir/all] Error 2
make: *** [Makefile:149: all] Error 2
I am wondering how I can build c2ffi on my FreeBSD and Debian systems?
On my FreeBSD installation, in the CMakeLists.txt I replaced the line
target_link_libraries(c2ffi PUBLIC clang-cpp LLVM)
with
target_link_libraries(c2ffi PUBLIC /usr/local/llvm10/lib/libclang-cpp.so LLVM)
On my Debian installation, it turned out that I did not have one of the libclang development packages installed. After installing that package I was able to run make without any problems.
The project's CMakeLists.txt is broken, so bug upstream. Actualy, there are numerous pull requests already filed:
https://github.com/rpav/c2ffi/pull/70
https://github.com/rpav/c2ffi/pull/68/
https://github.com/rpav/c2ffi/pull/65/
You can try these, or combine them into a working solution.

How to fix cmGLobalNInjaGenerator.cxx.o" error of cmake?

I am installing a newer version of cmake which is cmake 3.10.1 and the make command is giving me error while building CXX object source.
I have installed the ninja 1.5.1 but still getting the same error.
used this to install the cmake:
wget <link of the cmake3.10.1>
./configure
make # (at this stage getting error)
The error is:
[ 83%] Building CXX object Source/CMakeFiles/CMakeLib.dir/cmGlobalNinjaGenerator.cxx.o
/media/nadia/967E9B477E9B1F55/data/cmake-3.10.1/Source/cmGlobalNinjaGenerator.cxx: In member function ‘void cmGlobalNinjaGenerator::AppendTargetDependsClosure(const cmGeneratorTarget*, cmNinjaOuts&, bool)’:
/media/nadia/967E9B477E9B1F55/data/cmake-3.10.1/Source/cmGlobalNinjaGenerator.cxx:1077:40: error: ‘class std::map<const cmGeneratorTarget*, std::set<std::basic_string<char> > >’ has no member named ‘emplace_hint’
Source/CMakeFiles/CMakeLib.dir/build.make:5942: recipe for target 'Source/CMakeFiles/CMakeLib.dir/cmGlobalNinjaGenerator.cxx.o' failed
make[2]: *** [Source/CMakeFiles/CMakeLib.dir/cmGlobalNinjaGenerator.cxx.o] Error 1
CMakeFiles/Makefile2:2355: recipe for target 'Source/CMakeFiles/CMakeLib.dir/all' failed
make[1]: *** [Source/CMakeFiles/CMakeLib.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2