gpt4 book ai didi

c++ - CMake:在静态库上设置链接器标志,供消费者在链接时使用 (Visual Studio)

转载 作者:行者123 更新时间:2023-11-28 00:10:41 25 4
gpt4 key购买 nike

我有以下情况:一个静态库 MyStaticLib 依赖于 FFmpeg 项目的几个库(libavformat 等)。

FFmpeg 库(不是我)使用“/SAFESEH:NO”选项链接,这意味着链接到它们的任何图像(通过它们的导入库)也必须使用相同的选项链接(失败)因此使链接器中止并显示“LNK2026:模块对于 SAFESEH 图像不安全”)。

我已经尝试了所有我能想到的方法,但我还没有找到一种方法将该选项附加到我的 MyStaticLib 以使其传播给消费者。

这看起来很奇怪,因为 CMake 确实提供了将编译器 选项传播给消费者的方法:命令target_compile_options()PUBLIC 选项正是这样做的。

链接器标志没有类似的功能吗?

最佳答案

VC++ compilerlinker两者都接受正斜杠 (/) 和破折号 (–) 作为选项说明符。作为mentioned by @tsyvarev , CMake 可能对正斜杠有问题,将其视为路径分隔符。因此,您需要使用以下命令将链接器选项添加到 MyStaticLib 目标并将该选项传播到 MyStaticLib 使用者:

target_link_libraries(MyStaticLib PUBLIC "-SAFESEH:NO")

或者如果您的构建配置也支持其他编译器:

target_link_libraries(MyStaticLib PUBLIC "$<$<CXX_COMPILER_ID:MSVC>:-SAFESEH:NO>")

关于c++ - CMake:在静态库上设置链接器标志,供消费者在链接时使用 (Visual Studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33290879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com