如何解决在柯南安装期间添加链接器标志
我在一个使用多个外部库的项目中工作。这些库是使用 Conan 包含的。该项目主要是为 Unix 编写的,但它也需要在 Windows 上编译和运行。
我目前的问题是 Windows 默认 fopen()
为 O_TEXT
,而 Unix 期望为 O_BINARY
。我有一个适用于我自己的代码的修复程序,只需在链接时包含 binmode.obj
即可将此默认值更改为 O_BINARY。
问题是这不会影响我的第三方库。谷歌搜索并没有发现太多,大多数建议似乎是基于您创建自己的包的位置并希望添加标志,而不是在使用其他包时如何添加标志。
到目前为止我尝试过的:
- 将
binmode.obj
放在库之前,以防链接顺序很重要。没什么区别。 - 将
--env 'CL=link binmode.obj'
添加到conan install
,但此标志最终并未作为编译标志或链接标志的一部分。
有什么我可以尝试的建议吗?
编辑:我对“CL”不起作用的看法是错误的。这是由混乱的输出引起的。但我确实观察到 CL 似乎同时适用于编译器和链接器,这使得给出什么标志有些挑战。使用“/link”前缀使其适用于编译器,但不适用于链接器。
编辑 2:更多的困惑...我没有意识到 CL 值的语法是:"<compile flags> /link <link flags>"
。但是,它影响编译,但不影响链接。所以这个环境变量显然不能用来让柯南为基于自动工具的包添加链接器标志。
解决方法
嗨 Mats L 欢迎来到我们的社区! 我曾经遇到过类似的问题,我最终做的很笨拙,但也很简单:
在我位于 ~/.conan/profiles/default
的柯南配置文件或任何其他配置文件中,我实际上添加了一个环境变量:
CXX=/usr/bin/clang++ -fms-compatibility
。这个让我用这个标志编译了所有的 c++ 源代码(可以理解 Windows 特定的代码)。
因此,在您的情况下,您可以运行 which c++
来查找编译器的位置
并在您使用最终文件的柯南配置文件中编辑 CXX 环境变量可能如下所示:
[settings]
os=Macos
os_build=Macos
arch=x86_64
arch_build=x86_64
compiler=clang
compiler.version=11
compiler.libcxx=libc++
build_type=Release
[options]
[build_requires]
[env]
CXX=c++ --required_flag
一些附加说明:您可能还希望在 CC 环境变量上设置此标志。
最好不要更改默认配置文件,而是复制它(比如在名为 default_edited_copy 的文件上),然后使用 conan ... --profile default_edited_copy
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。