胡萝贝୧⍤⃝? 2023-11-20 20:07 采纳率: 58.3%
浏览 12
已结题

生成动态库,使用C语言调用出现错误

img

我在arm板上使用cmake编译生成的动态库,使用C语言程序调用为什么回出现这个问题呢?有什么解决方法吗?

img

这是CMakeList里的,该屏蔽的我都屏蔽了。还是有这个问题

  • 写回答

15条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-11-20 20:11
    关注
    获得1.00元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    问题分析:

    从错误信息上看,你生成的动态库 libDeviceAPI.so 在引用 PocoDynamic 模块时出现了 undefined symbol 错误。这意味着在链接时找不到 Poco 的动态库或者某个符号。导致这个问题的原因可能是在编译 libDeviceAPI.so 时没有正确链接 Poco 库,或者链接的版本不匹配。

    解决方法:

    为了解决这个问题,你可以按照以下步骤进行操作:

    Step 1: 检查依赖库是否正确安装:

    首先,确保你的系统上已经正确安装了 Poco 库,包括动态库和头文件。你可以使用 ldconfig -p | grep poco 命令来检查 Poco 库是否已经安装,并且能够被系统找到。

    如果没有安装,则需要先安装 Poco 库。可以通过以下命令在 Ubuntu 上安装 Poco 库:

    sudo apt-get install libpoco-dev
    

    Step 2: 检查编译选项和链接选项:

    在生成动态库的 CMakeLists.txt 文件中,你需要确保你正确设置了依赖库的路径和链接选项。你可以参考下面的示例代码:

    cmake_minimum_required(VERSION 3.10)
    project(MyLibrary)
    
    # 设置 Poco 库的路径
    set(POCO_ROOT_DIR "/usr/local")
    
    # 设置 Poco 库的头文件路径
    include_directories(${POCO_ROOT_DIR}/include)
    
    # 设置 Poco 库的动态库路径
    link_directories(${POCO_ROOT_DIR}/lib)
    
    # 设置编译选项
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
    
    # 生成动态库
    add_library(DeviceAPI SHARED device_api.c)
    
    # 链接 Poco 库
    target_link_libraries(DeviceAPI PocoFoundation PocoDynamic)
    

    确保你的 CMakeLists.txt 文件中的路径与你实际安装的 Poco 库路径一致。

    Step 3: 清理和重新编译:

    进行以上修改后,你需要删除之前生成的动态库文件和编译产生的中间文件,然后重新执行 CMake 生成新的 Makefile,并重新进行编译。

    rm -rf CMakeCache.txt CMakeFiles
    cmake .
    make
    

    重新编译后,再尝试运行你的程序,看看是否仍然出现 undefined symbol 错误。

    希望以上解决方法能够帮助到你,如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助你解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月28日
  • 修改了问题 11月20日
  • 创建了问题 11月20日

悬赏问题

  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能