IP_FILE_HOOK项目bug汇总

文章指导用户解决CMake项目配置中关于Ninja构建工具、C/C++编译器设置以及libhook.so与libdl链接的问题,包括安装Ninja、设置编译器和使用LD_PRELOAD环境变量。
摘要由CSDN通过智能技术生成

1、先搜索target_link_libraries然后在 cjson 后面加上dl

在这里插入图片描述
在这里插入图片描述

2、记得在CMakeLists.txt文件中添加

set(CMAKE_CXX_STANDARD 11)

在这里插入图片描述

3、Ninja下载

在这里插入图片描述

你遇到的问题与CMake项目的配置有关。CMake 无法找到与 “Ninja” 对应的构建程序,同时还提示C和C++编译器未设置。通常可以通过以下步骤解决这些问题:

  1. 安装 Ninja
    如果你想使用 Ninja 作为构建工具,你需要确保它已安装在你的系统上。Ninja 是一种构建工具,通常比 Make 更快。你可以使用系统的软件包管理器来安装它。例如,在 Debian/Ubuntu 上,你可以运行以下命令:

    sudo apt-get install ninja-build
    

    在其他系统上,你可能需要使用不同的软件包管理器或手动下载 Ninja。

  2. 设置C和C++编译器
    CMake 需要知道要使用哪个C和C++编译器。你可以在运行CMake时通过设置 CMAKE_C_COMPILERCMAKE_CXX_COMPILER 变量来指定这些编译器。例如,如果你想使用GCC作为编译器,可以执行以下命令:

    cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ /你的源代码路径
    

    请将 “gcc” 和 “g++” 替换为你的系统上适当的编译器命令。

  3. 生成构建系统
    在设置编译器和任何其他必要选项后,你可以生成构建系统。确保指定要使用的生成器(在这种情况下是Ninja):

    cmake --build . -G Ninja
    

    将 “.” 替换为你的CMake项目目录的路径。这个命令将生成Ninja构建文件并启动构建过程。

如果你不想使用Ninja作为构建系统,你可以在命令中使用不同的生成器,常见的替代选项包括 “Make” 或不指定生成器(CMake将使用系统的默认生成器)。

一旦你解决了这些问题,CMake应该能够成功配置你的项目并生成构建系统。

4、dlsym的bug问题

在这里插入图片描述

你的错误消息表明在运行 cat test_white_list.txt 时出现了符号查找错误。这通常发生在共享库(libhook.so)中引用了一个未定义的符号。

在这种情况下,可能发生以下情况:

  1. 共享库问题libhook.so 可能依赖于其他共享库,而这些库没有正确链接或者版本不匹配。你可以使用以下命令查看 libhook.so 的依赖关系:

    ldd libhook.so
    

    确保所有依赖项都可以正确找到,并且版本匹配。

  2. 库加载顺序:在运行 cat 时,动态链接器加载共享库。可能 libhook.so 被加载,但它依赖的符号在加载时找不到。你可以尝试设置 LD_PRELOAD 环境变量来确保 libhook.so 在其他库之前加载:

    LD_PRELOAD=/path/to/libhook.so cat test_white_list.txt
    
  3. CMake 链接问题:检查你的 CMake 构建脚本是否正确配置了链接依赖项,特别是 dlsym 这个符号是否正确链接到 libdl 库。确保你的 CMakeLists.txt 文件中有类似以下的行:

    target_link_libraries(your_target_name dl)
    

    这将确保 libdl 库正确链接到你的项目中。

如果以上方法仍无法解决问题,你可能需要进一步检查共享库的依赖关系和构建过程,以确保所有库正确链接,并且符号都能够正确解析。

在这里插入图片描述

根据你提供的 libcjson.so.1 的依赖信息,它似乎没有显式依赖于 libdl 库,因为 libdl 没有在依赖列表中。

问题可能出在 libhook.so 中,它依赖于 cjson 并可能间接依赖于 libdl,但却未正确链接到 libdl

你可以尝试在 libhook.so 的构建过程中显式链接到 libdl,以确保 dlsym 等符号能够正确解析。在你的 CMakeLists.txt 文件中添加以下行:

target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE cjson dl)

这将确保在构建 libhook.so 时,它会正确链接到 libdl

raries(${CMAKE_PROJECT_NAME} PRIVATE cjson dl)


这将确保在构建 `libhook.so` 时,它会正确链接到 `libdl`。

重新构建 `libhook.so` 后,再次运行你的测试命令 `cat test_white_list.txt`,看看是否问题得到解决。如果问题仍然存在,请确保 `libhook.so` 的链接设置和运行时环境都正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霜晨月c

谢谢老板地打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值