Alexander Neundorf wrote: > On Tuesday 16 April 2013, Stephen Kelly wrote: >> Alexander Neundorf wrote: >> > On Friday 12 April 2013, Stephen Kelly wrote: >> >> I found out what the problem is. CMake doesn't add the sysroot to the >> >> link line, so that's why the linker is not finding the library. It was >> >> searching in my native root and not finding them. >> >> >> >> set(CMAKE_CXX_LINK_FLAGS >> >> >> >> "${CMAKE_CXX_LINK_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}") >> >> >> >> Is there a reason CMake does not do something like the above already? >> > >> > I don't think there's a reason that this is not done, except that >> > nobody has done it yet ;-) >> > So this should be somewhere inside a if(CMAKE_CROSSCOMPILING) in Linux- >> > GNU.cmake maybe ? >> >> It needs special handling in c++ actually. I'll work on it. If >> CMAKE_FIND_ROOT_PATH can be a list, then we'll need a new variable like >> CMAKE_SYSROOT (which is also relevant to find_* commands) which is not a >> list. > > That was the intention of CMAKE_FIND_ROOT_PATH, really. > When we added this in 2007, I think CMAKE_PREFIX_PATH did not exist yet > (this was still 2.4.x on the way to 2.6.0). > So CMAKE_FIND_ROOT_PATH had to be a list, the list of directories where > stuff for the target can be found. > Maybe today this could be done differently. > Let's say CMAKE_FIND_ROOT_PATH would be only one directory (sysroot), > which is set so that it points to the target file system hierarchy.
That raises backward compatibility questions. I'd rather not. > The additional directories which need to be searched could today maybe > also be listed in CMAKE_PREFIX_PATH. I have my rootfs at /home/stephen/rpi/rasp-pi-rootfs. That's what I use for my syroot. I might also want to put KArchive in /opt/kf5/ on the target fs. So I'd additionally add /home/stephen/rpi/rasp-pi-rootfs/opt/kf5/ to the CMAKE_FIND_ROOT_PATHS. I pushed a set-sysroot branch implementing this to my clone. This actually also makes it possible to cross-compile for android without forcing the compiler. Without this patch: -- Check for working C compiler: /home/stephen/android/android-ndk- r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm- linux-androideabi-gcc -- Check for working C compiler: /home/stephen/android/android-ndk- r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm- linux-androideabi-gcc -- broken CMake Error at /usr/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:61 (message): The C compiler "/home/stephen/android/android-ndk-r8e/toolchains/arm-linux- androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc" is not able to compile a simple test program. It fails with the following output: Change Dir: /home/stephen/dev/src/qtbase- stable/tests/auto/cmake/build/CMakeFiles/CMakeTmp Run Build Command:/usr/bin/make "cmTryCompileExec3042013940/fast" /usr/bin/make -f CMakeFiles/cmTryCompileExec3042013940.dir/build.make CMakeFiles/cmTryCompileExec3042013940.dir/build make[1]: Entering directory `/home/stephen/dev/src/qtbase- stable/tests/auto/cmake/build/CMakeFiles/CMakeTmp' /usr/bin/cmake -E cmake_progress_report /home/stephen/dev/src/qtbase- stable/tests/auto/cmake/build/CMakeFiles/CMakeTmp/CMakeFiles 1 Building C object CMakeFiles/cmTryCompileExec3042013940.dir/testCCompiler.c.o /home/stephen/android/android-ndk-r8e/toolchains/arm-linux- androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -o CMakeFiles/cmTryCompileExec3042013940.dir/testCCompiler.c.o -c /home/stephen/dev/src/qtbase- stable/tests/auto/cmake/build/CMakeFiles/CMakeTmp/testCCompiler.c Linking C executable cmTryCompileExec3042013940 /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec3042013940.dir/link.txt --verbose=1 /home/stephen/android/android-ndk-r8e/toolchains/arm-linux- androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc CMakeFiles/cmTryCompileExec3042013940.dir/testCCompiler.c.o -o cmTryCompileExec3042013940 -rdynamic /home/stephen/android/android-ndk-r8e/toolchains/arm-linux- androideabi-4.7/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux- androideabi/4.7/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory /home/stephen/android/android-ndk-r8e/toolchains/arm-linux- androideabi-4.7/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux- androideabi/4.7/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory /home/stephen/android/android-ndk-r8e/toolchains/arm-linux- androideabi-4.7/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux- androideabi/4.7/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc /home/stephen/android/android-ndk-r8e/toolchains/arm-linux- androideabi-4.7/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux- androideabi/4.7/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl collect2: error: ld returned 1 exit status make[1]: Leaving directory `/home/stephen/dev/src/qtbase- stable/tests/auto/cmake/build/CMakeFiles/CMakeTmp' make[1]: *** [cmTryCompileExec3042013940] Error 1 make: *** [cmTryCompileExec3042013940/fast] Error 2 To work around that, the Android toolchain in the wild forces the compiler currently: http://code.opencv.org/projects/opencv/repository/revisions/master/entry/android/android.toolchain.cmake Thanks, Steve. -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers