我正在尝试针对安装在不同位置(https://github.com/UWQuickstep/quickstep)的新编译的glibc构建一个似乎使用cmake的项目(https://sourceware.org/glibc/wiki/Testing/Builds#Compile_against_glibc_in_an_installed_location)。该项目将quickstep_cli_shell
可执行文件作为 only 目标。
我想在项目中添加以下编译选项(其中SYSROOT=<new glibc installation dir>
)
-L${SYSROOT}/usr/lib64 \
-I${SYSROOT}/include \
--sysroot=${SYSROOT} \
-Wl,-rpath=${SYSROOT}/lib64 \
-Wl,--dynamic-linker=${SYSROOT}/lib64/ld-2.18.90.so\
set(CMAKE_VERBOSE_MAKEFILE on)
set(SYSROOT /fastdisk/glibc-master-install)
add_compile_options("-L${SYSROOT}/usr/lib64" "--sysroot=${SYSROOT}" "-Wl,-rpath=${SYSROOT}/lib64" "-Wl,--dynamic-linker=${SYSROOT}/lib64/ld-2.30.so")
include_directories(BEFORE "${SYSROOT}/include")
cmake .. && make
时,我看到所有对象文件都是使用适当的编译选项构建的,除了最终的可执行文件。任何其他目标文件-
/usr/bin/c++ -I/fastdisk/glibc-master-install/include <some other includes> -std=c++14 <some other options> -L/fastdisk/glibc-master-install/usr/lib64 --sysroot=/fastdisk/glibc-master-install -Wl,-rpath=/fastdisk/glibc-master-install/lib64 -Wl,--dynamic-linker=/fastdisk/glibc-master-install/lib64/ld-2.30.so -o CMakeFiles/quickstep_utility_Macros.dir/__/empty_src.cpp.o -c /fastdisk/quickstep/empty_src.cpp
最终的quickstep_cli_shell构建
/usr/bin/c++ -std=c++14 <some other options> -rdynamic CMakeFiles/quickstep_cli_shell.dir/cli/QuickstepCli.cpp.o -o quickstep_cli_shell <all .a dependencies>
$ quickstep/build# ldd quickstep_cli_shell
linux-vdso.so.1 (0x00007ffc5ff6f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f09b6d50000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f09b69c7000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f09b6629000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f09b6411000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f09b6020000) ------> should point to libc in $SYSROOT
/lib64/ld-linux-x86-64.so.2 (0x00007f09c50a1000)
我花了很多时间试图找到一种通过将最终目标可执行文件与新glibc链接来构建最终目标可执行文件的方法,但尚未成功(我使用cmake 3.10.2,如果有帮助的话)。 / p>
我的cmake更改是否有问题?如何正确建立目标?