今年真减肥 2023-02-16 14:20 采纳率: 35.7%
浏览 33
已结题

BACnet-stack v1.0.0库编译问题

使用src目录下的Makefile,添加命令编译生成静态库,能够正确编译并生成,改为生成动态库,在编译时报错:
multiple definition of `x',这里x代表函数,查看文件,这些函数都只有在C文件中存在一份定义,头文件中有如下的声明:

BACNET_STACK_EXPORT
    int bvlc_encode_address(
        uint8_t *pdu, uint16_t pdu_size, const BACNET_IP_ADDRESS *ip_address);

不太清楚是否是由于BACNET_STACK_EXPORT这个宏引起的,请教一下是否有使用过该库并尝试自己编译动态库的分享一下经验,谢谢

  • 写回答

2条回答 默认 最新

  • zmy1127 2023-02-16 18:54
    关注

    根据您提供的信息,问题似乎与符号重复定义有关。这可能是因为在编译生成动态库时,同一个符号在多个目标文件中被定义了多次,导致链接错误。

    BACNET_STACK_EXPORT宏的定义可能与此有关。您可以查看宏的定义,确认是否将函数定义为"extern"以便在多个源文件中使用,例如:

    
    #if defined(_MSC_VER)
    #define BACNET_STACK_EXPORT __declspec(dllexport)
    #else
    #define BACNET_STACK_EXPORT extern
    #endif
    
    

    如果这个宏已经定义为"extern",那么问题可能是由于您的Makefile没有正确地链接库。在生成动态库时,需要使用-fPIC选项生成位置无关代码,并将生成的目标文件链接到动态库中。您可以尝试使用以下命令编译生成动态库:

    
    gcc -shared -fPIC -o libbacnet.so *.o
    
    

    其中,*.o是所有编译生成的目标文件的通配符。

    如果您已经使用了类似的命令,但仍然遇到问题,建议您检查Makefile中的相关规则和选项,以确认是否正确地链接了库,并正确地编译了源代码。您也可以尝试使用其他工具链(如CMake)来生成动态库,以便更好地管理依赖关系和编译选项。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月16日

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化