GCC下未定义的引用与LTO交叉编译静态库

2023-11-23

我正在尝试使用 GCC 4.9.2 从 Linux (x86_64-pc-linux-gnu) 交叉编译 Windows (x86_64-w64-mingw32) 的应用程序。

当构建链接到静态库的目标并使用链接时优化时,我从链接器中得到目标从库中使用的所有符号的未定义引用错误。

例如,从 bar.cpp 构建 bar.a

int bar (void) {return 42;}

并与 foo.cpp 链接

extern int bar (void);
int main (int, char**) {bar ();}

使用命令行

x86_64-w64-mingw32-g++ -flto -o foo.o -c foo.cpp
x86_64-w64-mingw32-g++ -flto -o bar.o -c bar.cpp
x86_64-w64-mingw32-gcc-ar rc bar.a bar.o
x86_64-w64-mingw32-gcc-ranlib bar.a
x86_64-w64-mingw32-g++ -flto -fuse-linker-plugin foo.o bar.a -o foo

结果出现错误

/tmp/ccc3Twsc.lto.o:foo.o:(.text+0x15): undefined reference to `bar()'
collect2: error: ld returned 1 exit status

从上面:

  • 我正在使用 ar/ranlib 的 gcc 包装器
  • 没有外部依赖
  • 所有文件都使用相同的选项进行编译

我尝试过使用 -fuse-linker-plugin、gcc-ar 与 ar、符号可见性选项、优化等的各种组合,但在不关闭 LTO 的情况下无法使其正确链接。

所有目标都在本机编译器 (x86_64 Linux) 下正确构建。

我在这里缺少什么明显的东西吗?


我能够在 Win7 64 位下的 Mingw32-gcc 4.9.2 上重现此链接问题。但是,我确实通过添加使其成功链接-ffat-lto-objects作为解决方法:

g++ -flto -o foo.o -c foo.cpp
g++ -flto -ffat-lto-objects -o bar.o -c bar.cpp
ar rc bar.a bar.o
g++ -flto -o foo.exe foo.o bar.a
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GCC下未定义的引用与LTO交叉编译静态库 的相关文章

  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • IEnumerable.Except 不起作用,那么我该怎么办?

    我有一个 linq to sql 数据库 非常简单 我们有 3 个表 项目和用户 有一个名为 User Projects 的连接表将它们连接在一起 我已经有了一个获得的工作方法IEnumberable
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i

随机推荐

  • 有没有办法将数据流式传输到 blob(或生成巨大的 blob)

    检查 MDN 我发现以前有BlobBuilder我可以打电话给blobBuilder append继续向 blob 添加数据 但根据 MDNBlobBuilder已被弃用 有利于Blob构造函数 不幸的是Blob构造函数在构造时需要内存中的
  • 当表中的数据发生更改时,SqlCacheDependency 如何知道何时与任何侦听器进行通信?

    我一直在做一些研究 我可以看到这个系统的大部分管道 但是我不确定 sql server 如何知道当表中的数据发生变化时何时向任何侦听器 应用程序 发送消息 我将首先解释我所理解的内容 直到我迷路为止 1 需要在数据库上启用Service B
  • Crystal Reports - 向存储过程添加新字段并使其在 IDE 中可用?

    我向存储过程添加了一个新字段 如何在不重置数据库专家中的数据源的情况下使其在 Crystal Reports 中可用 验证数据库有效 但是如果您使用设置数据源位置 在数据库 gt 设置数据源位置中找到 在过程更改后更新报告 打开 设置数据源
  • 在 python 中排序枚举值

    我希望能够安排枚举的顺序 有人建议如何解决这个问题吗 使用以下枚举元类 class EnumMeta type def new typ name bases attrs cls attrs cls choices for attr name
  • 使用 Trivy 扫描本地 docker 映像中的漏洞会导致未经授权

    我已将 docker 映像从私有存储库拉到本地 并尝试使用 trivy image 命令扫描本地映像 它正在拉取数据库 但显示访问本地映像时出现未经授权的错误 scan error unable to initialize a scanne
  • MySQL:仅在不在另一表中时才从一个表中选择电子邮件?

    我将构建一个名为 donotemail 的表 其中包含要求从我们的电子邮件列表中删除的人员的电子邮件地址 我有另一个名为 users 的表 其中包含电子邮件列 如何选择用户的所有电子邮件 但前提是电子邮件地址不在 donotemail 表中
  • R中的3层圆环图

    我正在尝试在 R 中重新创建此图像 但是我无法弄清楚如何将 3 层添加到圆环图 我找到的所有内容 例如 webr PieDonut 只允许2 使用ggplot我也无法重新创建它 MRE 是 library ggplot2 library w
  • Tensorflow - 无法将操作转换为张量

    我想计算操作输出和张量之间的成对欧几里得距离 我正在使用建议的代码here 这是我的代码的要点 Suppose logits has shape 32 128 logits tf get default graph get operatio
  • WPF 触发器

    我试图设置一个触发器 当我获得的单元格值是某种类型时显示文本块 我已经成功地在相同的情况下显示了图像 但在这种情况下我不需要图像 而是一些文本 已注释掉几行以便测试 尝试使其工作 注释掉的代码有效 其中的文本块 text xxx 没有 这是
  • 关于小型基于 C 的向量和矩阵库的建议 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我需要一个用于 2d 和 3d 向量以及 3x3 和 4x4 矩阵的轻量级库 在基础C中 这样我就不会重新发明轮子 有什么建议么 Meschach是一个纯 C 向量 矩阵库 明显小于
  • preg_replace() 会改变我的字符集吗?

    我有以下代码似乎正在改变我的字符集 html echo html result html preg replace s html echo html result 但是 当我使用 t n r f v 作为我的模式而不是特殊字符 s它工作正常
  • Bluemix 新手,新应用程序出现错误“主机已被占用”

    我是 Bluemix 的新手 按照以下步骤创建应用程序 使用您的 Bluemix 帐户登录 Bluemix 打开目录菜单 从运行时部分 单击 Liberty for Java 在应用程序字段中 指定您的应用程序的名称 输入姓名 单击创建按钮
  • 覆盖Android后退按钮

    关于我为什么尝试这样做的一些信息 我正在使用 ActivityGroups 从 tabHost 活动打开一个活动 并将该新活动保留在选项卡下 那部分我已经有了 但是 在该新活动中 如果我使用后退按钮 它会将我直接退出选项卡活动 因此我必须单
  • 没有 'owned by' 属性的 Postgres 序列在 Django 1.3 中不会返回 id

    最近从 Oracle 迁移到 Postgres 并从 Django 1 2 升级到 1 3 后 我们在将对象保存到数据库时开始遇到问题 当调用 save 时 不会返回 id 即使通过标准 django 管理面板保存标准 django aut
  • android:选择图库中的多个图像并启动隐式意图

    如何获取所有选定图像的图像路径或仅将它们显示在我的应用程序中 当用户在图库中选择图像并按共享按钮时 我可以启动隐式意图并将其显示在我的 imageView 中 如下所示 ImageView iv ImageView findViewById
  • 将时间序列数据提供给有状态 LSTM 的正确方法?

    假设我有一个整数序列 0 1 2 并希望根据最后 3 个整数来预测下一个整数 例如 0 1 2 gt 5 3 4 5 gt 6 etc 假设我像这样设置模型 batch size 1 time steps 3 model Sequentia
  • 钩住时间编织块

    我想对 knitr 块进行计时 并记录使用 LaTeX 输出中的注释渲染它们所花费的时间 我尝试过以下钩子 now Sys time knit hooks set timeit function before if before now l
  • JavaScript 函数表达式前面的加号

    我一直在寻找有关立即调用函数的信息 在某个地方我偶然发现了这个符号 function console log Something 有人可以向我解释一下是什么吗 函数前面的符号意味着 做什么 它强制解析器处理以下部分 作为一种表达方式 这通常
  • 将边框应用于图像形状

    在我的应用程序中 我有不同形状的各种图像 如树 云 附有示例图片 我想以编程方式为这些形状添加边框 就像如果图像是树那么需要突出显示树的形状 我无法使用 callayer 因为它会将边框应用于 UIImageView 谁能指导我如何实现这一
  • GCC下未定义的引用与LTO交叉编译静态库

    我正在尝试使用 GCC 4 9 2 从 Linux x86 64 pc linux gnu 交叉编译 Windows x86 64 w64 mingw32 的应用程序 当构建链接到静态库的目标并使用链接时优化时 我从链接器中得到目标从库中使