set_target_properties配置多个--wrap函数链接报错如何解决
问题原因
你的CMake配置中LINK_FLAGS的-Wl,参数后存在多余空格,导致GCC将后续的--wrap参数识别为GCC自身的编译选项,而非传递给链接器的参数。GCC本身没有--wrap相关选项,该选项仅属于GNU链接器ld,因此触发无法识别选项的报错。-Wl,前缀的语法规则为:前缀与后续链接器参数之间不能有空格,多个链接器参数之间用逗号分隔,同样不能插入空格。你的写法中逗号后加了空格,直接破坏了参数传递规则。
修复方案
方案1:直接修改原有写法
将set_target_properties行的所有多余空格删除即可:
set_target_properties(beTheLight-unit-tests PROPERTIES LINK_FLAGS "-Wl,--wrap=get_rx_dali_flag,--wrap=set_led_frequency,--wrap=application_process")
方案2:使用更规范的现代CMake写法
推荐用target_link_options替代直接修改LINK_FLAGS,可读性更高且不容易出错:
target_link_options(beTheLight-unit-tests PRIVATE -Wl,--wrap=get_rx_dali_flag -Wl,--wrap=set_led_frequency -Wl,--wrap=application_process )
把这段配置加在target_link_libraries配置之后即可。
内容的提问来源于stack exchange,提问作者arda30
相关产品推荐
相关产品推荐

