【标题描述】编译时函数名冲突
【环境信息】Ubuntu 22.04, gcc 9
【问题复现步骤】
当采用allyesconfig配置内核的时候,make时链接过程会出现错误。
原因是drivers/net/ethernet/huawei/hinic/目录和drivers/scsi/huawei/hifc/目录具有大量重名非static函数和全局变量,而且Kconfig中没有相应的互斥策略。
出现概率:必现
【附件信息】
下面是编译openEuler Kernel 1.0 LTS 的链接错误信息,其他版本也有相似情况:
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o: in function `ppf_ht_gpa_set':
(.text+0x75b0): multiple definition of `ppf_ht_gpa_set'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0x6fa0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o: in function `mgmt_fmw_act_event_handler':
(.text+0xac50): multiple definition of `mgmt_fmw_act_event_handler'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0xd00): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o: in function `print_hilink_info':
(.text+0x4020): multiple definition of `print_hilink_info'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0x3e80): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o: in function `mgmt_get_mctp_event_handler':
(.text+0xacf0): multiple definition of `mgmt_get_mctp_event_handler'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0xda0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o:(.data+0x60): multiple definition of `__hw_to_char_fec'; drivers/scsi/huawei/hifc/hifc_hwdev.o:(.data+0x140): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o:(.data+0x0): multiple definition of `__hw_to_char_port_type'; drivers/scsi/huawei/hifc/hifc_hwdev.o:(.data+0xe0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o: in function `mgmt_pcie_dfx_event_handler':
(.text+0xaca0): multiple definition of `mgmt_pcie_dfx_event_handler'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0xd50): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o: in function `pf_fault_event_handler':
(.text+0xabb0): multiple definition of `pf_fault_event_handler'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0xc60): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o:(.data+0xa0): multiple definition of `mgmt_status_log'; drivers/scsi/huawei/hifc/hifc_hwdev.o:(.data+0x180): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_hwdev.o: in function `mgmt_watchdog_event_handler':
(.text+0xac00): multiple definition of `mgmt_watchdog_event_handler'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0xcb0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_cfg.o: in function `init_cfg_mgmt':
(.text+0x4f50): multiple definition of `init_cfg_mgmt'; drivers/scsi/huawei/hifc/hifc_cfg.o:hifc_cfg.c:(.text+0x910): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_cfg.o: in function `free_capability':
(.text+0x6500): multiple definition of `free_capability'; drivers/scsi/huawei/hifc/hifc_cfg.o:hifc_cfg.c:(.text+0x12a0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_cfg.o:(.bss+0x400): multiple definition of `intr_mode'; drivers/scsi/huawei/hifc/hifc_cfg.o:(.bss+0x100): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_cfg.o: in function `free_cfg_mgmt':
(.text+0x5640): multiple definition of `free_cfg_mgmt'; drivers/scsi/huawei/hifc/hifc_cfg.o:hifc_cfg.c:(.text+0xfa0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_cfg.o: in function `init_capability':
(.text+0x57d0): multiple definition of `init_capability'; drivers/scsi/huawei/hifc/hifc_cfg.o:hifc_cfg.c:(.text+0x1110): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_lld.o:(.data+0x2a0): multiple definition of `g_hinic_chip_list'; drivers/scsi/huawei/hifc/hifc_lld.o:(.data+0x1e0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_lld.o:(.bss+0x240): multiple definition of `g_lld_lock'; drivers/scsi/huawei/hifc/hifc_lld.o:(.bss+0xc0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_lld.o: in function `get_fc_devname':
(.text+0x5e50): multiple definition of `get_fc_devname'; drivers/scsi/huawei/hifc/hifc_tool_hw.o:hifc_tool_hw.c:(.text+0x1a50): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x4a0): multiple definition of `g_card_phy_addr'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x4a0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x3a0): multiple definition of `card_id'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x3a0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `ffm_intr_msg_record':
hinic_dbgtool_knl.c:(.text+0x1e0): multiple definition of `ffm_intr_msg_record'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x1e0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x8e0): multiple definition of `g_card_node_array'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x8e0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_api_cmd_read':
hinic_dbgtool_knl.c:(.text+0x5d0): multiple definition of `dbgtool_knl_api_cmd_read'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x3d0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_api_cmd_write':
hinic_dbgtool_knl.c:(.text+0x7e0): multiple definition of `dbgtool_knl_api_cmd_write'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x5e0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `chipif_get_all_pf_dev_info':
hinic_dbgtool_knl.c:(.text+0x930): multiple definition of `chipif_get_all_pf_dev_info'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x730): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_pf_dev_info_get':
hinic_dbgtool_knl.c:(.text+0xb20): multiple definition of `dbgtool_knl_pf_dev_info_get'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x920): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x3e0): multiple definition of `g_addr_lock'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x3e0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x6c0): multiple definition of `g_card_vir_addr'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x6c0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_ffm_info_rd':
hinic_dbgtool_knl.c:(.text+0xe70): multiple definition of `dbgtool_knl_ffm_info_rd'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0xc70): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_ffm_info_clr':
hinic_dbgtool_knl.c:(.text+0xed0): multiple definition of `dbgtool_knl_ffm_info_clr'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0xcd0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_msg_to_up':
hinic_dbgtool_knl.c:(.text+0xf00): multiple definition of `dbgtool_knl_msg_to_up'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0xd00): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_free_mem':
hinic_dbgtool_knl.c:(.text+0x1220): multiple definition of `dbgtool_knl_free_mem'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x1020): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_unlocked_ioctl':
hinic_dbgtool_knl.c:(.text+0x13e0): multiple definition of `dbgtool_knl_unlocked_ioctl'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x11e0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_init':
hinic_dbgtool_knl.c:(.text+0x16e0): multiple definition of `dbgtool_knl_init'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x14d0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x100): multiple definition of `g_dbgtool_init_flag'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x100): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0xc0): multiple definition of `g_dbgtool_ref_cnt'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0xc0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x360): multiple definition of `dbgtool_dev_id'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x360): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x180): multiple definition of `dbgtool_chr_dev'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x180): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o:(.bss+0x140): multiple definition of `dbgtool_d_class'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x140): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_dbgtool_knl.o: in function `dbgtool_knl_deinit':
hinic_dbgtool_knl.c:(.text+0x1b80): multiple definition of `dbgtool_knl_deinit'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:hifc_dbgtool_knl.c:(.text+0x1970): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_nictool.o: in function `send_to_service_driver':
hinic_nictool.c:(.text+0x4fc0): multiple definition of `send_to_service_driver'; drivers/scsi/huawei/hifc/hifc_tool.o:hifc_tool.c:(.text+0x790): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_nictool.o:(.data+0x0): multiple definition of `sm_module_cmd_handle'; drivers/scsi/huawei/hifc/hifc_tool_hw.o:(.data+0x0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_nictool.o: in function `if_nictool_exist':
hinic_nictool.c:(.text+0x66b0): multiple definition of `if_nictool_exist'; drivers/scsi/huawei/hifc/hifc_tool.o:hifc_tool.c:(.text+0x12c0): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_nictool.o: in function `nictool_k_init':
hinic_nictool.c:(.text+0x6720): multiple definition of `nictool_k_init'; drivers/scsi/huawei/hifc/hifc_tool.o:hifc_tool.c:(.text+0x1330): first defined here
ld: drivers/net/ethernet/huawei/hinic/hinic_nictool.o: in function `nictool_k_uninit':
hinic_nictool.c:(.text+0x6880): multiple definition of `nictool_k_uninit'; drivers/scsi/huawei/hifc/hifc_tool.o:hifc_tool.c:(.text+0x14d0): first defined here
ld: drivers/net/ethernet/huawei/bma/edma_drv/bma_pci.o:(.bss+0x40): multiple definition of `debug'; arch/x86/entry/entry_64.o:(.entry.text+0x1170): first defined here
ld: drivers/net/ethernet/huawei/bma/cdev_drv/bma_cdev.o:(.bss+0x540): multiple definition of `debug'; arch/x86/entry/entry_64.o:(.entry.text+0x1170): first defined here
ld: drivers/net/ethernet/huawei/bma/veth_drv/veth_hb.o:(.bss+0x300): multiple definition of `debug'; arch/x86/entry/entry_64.o:(.entry.text+0x1170): first defined here
ld: drivers/net/ethernet/huawei/bma/cdev_veth_drv/virtual_cdev_eth_net.o:(.bss+0x40): multiple definition of `debug'; arch/x86/entry/entry_64.o:(.entry.text+0x1170): first defined here
Hi chengziqiu, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Kernel, and any of the maintainers: @YangYingliang , @成坚 (CHENG Jian) , @jiaoff , @刘勇强 , @wangxiongfeng , @朱科潜 , @WangShaoBo , @lujialin , @Xu Kuohai , @冷嘲啊 , @Lingmingqiang , @yuzenghui , @juntian , @OSSIM , @陈结松 , @whoisxxx , @koulihong , @刘恺 , @hanjun-guo , @woqidaideshi , @Chiqijun , @Kefeng , @ThunderTown , @AlexGuo , @kylin-mayukun , @Zheng Zucheng , @柳歆 , @Jackie Liu , @zhujianwei001 , @郑振鹏 , @SuperSix173 , @colyli , @Zhang Yi , @htforge , @Qiuuuuu , @Yuehaibing , @xiehaocheng , @guzitao , @CTC-Xibo.Wang , @zhanghongchen , @chen wei , @Jason Zeng , @苟浩 , @DuanqiangWen , @georgeguo , @毛泓博 , @AllenShi , @zhangjialin , @Wei Li , @tcc@hello , @谭小飞 , @Fred Kimmy , @LiYihang , @young1c , @hucz , @WangBoe2022 , @chenke , @李力军 , @Yang Shen , @wsoydl , @sanglipeng , @zhangchangzhong , @jimmy_hero , @YGN-NDWD-Official , @Xie XiuQi , @zhengzengkai
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
目前的想的解决方案是先把对应模块内能改成static的符号改成static作为一个commit提交。不能static的符号加上前缀名来解决ld符号冲突的问题,这部分分为多个commit提交。
第一版commit将所有仅在当前文件内使用的符号修改为static,见https://gitee.com/ihopenot/kernel/commit/96205b018fa25d75901b09b55533ffb480dfcc5f
It seems this issue is not fully resolved. The compilation of openEuler-22.03-LTS-SP2 still encountered some errors.
Even I revised some variables as static, it still reports the following errors. @YangYingliang @zhangchangzhong @zhangjialin
ld: drivers/net/ethernet/huawei/hinic3/hw/hinic3_hwdev.o: in function `set_slave_host_enable':
(.text+0x2860): multiple definition of `set_slave_host_enable'; drivers/net/ethernet/huawei/hinic/hinic_multi_host_mgmt.o:(.text+0x600): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/hinic3_lld.o:(.bss+0xc0): multiple definition of `g_uld_mutex'; drivers/net/ethernet/3snic/sssnic/hw/sss_pci_global.o:(.bss+0x40): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/hinic3_lld.o:(.bss+0x180): multiple definition of `g_uld_info'; drivers/net/ethernet/huawei/hinic/hinic_lld.o:(.bss+0x2e0): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/hinic3_dev_mgmt.o: in function `lld_dev_hold':
(.text+0x4a0): multiple definition of `lld_dev_hold'; drivers/scsi/huawei/hifc/hifc_lld.o:hifc_lld.c:(.text+0x540): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/hinic3_dev_mgmt.o: in function `lld_dev_put':
(.text+0x500): multiple definition of `lld_dev_put'; drivers/scsi/huawei/hifc/hifc_lld.o:hifc_lld.c:(.text+0x640): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/hinic3_hw_mt.o: in function `send_to_sm':
hinic3_hw_mt.c:(.text+0x16e0): multiple definition of `send_to_sm'; drivers/scsi/huawei/hifc/hifc_tool_hw.o:hifc_tool_hw.c:(.text+0x1380): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/hinic3_nictool.o:(.data+0x0): multiple definition of `hw_driv_module_cmd_handle'; drivers/net/ethernet/huawei/hinic/hinic_nictool.o:(.data+0x0): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/hinic3_nictool.o:(.bss+0x500): multiple definition of `g_card_node_array'; drivers/scsi/huawei/hifc/hifc_dbgtool_knl.o:(.bss+0x8e0): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/ossl_knl_linux.o: in function `add_to_timer':
ossl_knl_linux.c:(.text+0x260): multiple definition of `add_to_timer'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0x6200): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hw/ossl_knl_linux.o: in function `delete_timer':
ossl_knl_linux.c:(.text+0x2c0): multiple definition of `delete_timer'; drivers/scsi/huawei/hifc/hifc_hwdev.o:hifc_hwdev.c:(.text+0x6240): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hinic3_main.o:(.data+0x260): multiple definition of `rx_buff'; drivers/net/ethernet/huawei/hinic/hinic_main.o:(.data+0x360): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hinic3_main.o:(.data+0x80): multiple definition of `g_nic_uld_info'; drivers/net/ethernet/3snic/sssnic/nic/sss_nic_main.o:(.data+0x80): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hinic3_main.o: in function `get_nic_uld_info':
(.text+0x1240): multiple definition of `get_nic_uld_info'; drivers/net/ethernet/3snic/sssnic/nic/sss_nic_main.o:sss_nic_main.c:(.text+0xc40): first defined here
ld: drivers/net/ethernet/huawei/hinic3/hinic3_dbg.o: in function `nic_ioctl':
hinic3_dbg.c:(.text+0x2e80): multiple definition of `nic_ioctl'; drivers/net/ethernet/huawei/hinic/hinic_nictool.o:hinic_nictool.c:(.text+0x60c0): first defined here
好的,我找对应责任人再确认一下
我可以帮忙提交PR修复,但是我之前发送到openeuler kernel 邮件列表中的邮件并没有显示出来,也没有转换为PR。发送邮件为dzm91@hust.edu.cn
登录 后才可以发表评论