首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使目标文件首先链接?

如何使目标文件首先链接?
EN

Stack Overflow用户
提问于 2021-02-10 16:30:11
回答 1查看 56关注 0票数 1

我正在尝试为最初用于Unix平台的代码编译一个Windows。我遇到的一个问题是,fopen()默认为O_TEXT,但Unix默认为O_BINARY。Windows推荐了两种解决此问题的方法:

  1. 使用_set_fmode()函数,可能是因为我无法从正确的上下文调用它。
  2. 链接和binmode.obj对象文件。这个文件包含在编译器中,编译器知道在哪里查找它。

后者适用于我自己的代码,但它似乎不适用于第三方静态库。查看链接器输出,我可以看到静态库包含在binmode.obj之前,而binmode.obj包含在我自己的对象文件之前。真正的解决方案应该是说服所有外部库包含binmode.obj,但这在某种程度上并不简单,将来可能会导致大量的维护开销。因此,我想尝试将binmode.obj移到链接器命令行的开头,但事实证明这非常困难。我试过:

  1. target_link_libraries( mylib PRIVATE binmode.obj ) -得到了正确的位置,但被重命名为binmode.obj.lib临时链接器错误。
  2. 尝试用binmode.obj作为预编译对象创建一个静态库,但是得到了一个文件有相对路径的错误。我不知道如何使它成为一个完整的路径。
  3. 尝试以不同的方式将它添加为链接器标志,甚至包括使用工具链文件,但最终都将binmode.obj放在库之后。

我现在没有想法了,我觉得我需要帮助。有什么建议怎么解决吗?

EN

回答 1

Stack Overflow用户

发布于 2021-02-11 07:54:33

@fabian的评论让我阅读了CMake文档的正确部分,这让我意识到可以使用未知的库类型。使用CMake中的以下代码,我可以使binmode.obj出现在所有库之前:

代码语言:javascript
复制
add_library( binmode_obj UNKNOWN IMPORTED GLOBAL )
set_target_properties( binmode_obj PROPERTIES IMPORTED_LOCATION binmode.obj )
target_link_libraries( mylib PUBLIC binmode_obj )

这解决了我的问题,即在库之前尝试链接binmode.obj是否可以修复我原来的问题。不幸的是没有。但这是另一个问题..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66140916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档