使用 gcc 链接库:参数顺序

2023-12-24

当我将 Ubuntu 发行版升级到 11.10 后,我开始看到 gcc 的奇怪链接器行为。我能够通过移动我的-lgcc 命令末尾的参数(我的问题与中描述的问题类似)这个线程 https://stackoverflow.com/questions/7824439/c-math-linker-problems-on-ubuntu-11-10,并且建议的解决方案对我有用......谢谢!)。

我的问题是...为什么我现在才出现这个问题?我在 OS X 和 Ubuntu 上开发和测试这段代码已经有一段时间了:我从来不知道这一点-l命令应该在您的 .c 文件之后执行,但即便如此,这以前从未给我带来过问题。我猜这与 GCC 版本的关系比 Ubuntu 发行版本的关系更大。

这个新版本是否只是比早期版本更严格地执行此要求?


对于 gcc 以及其他编译器(例如 clang),链接器命令参数的顺序确实很重要。 根据经验,在编写链接器命令时我将使用以下顺序:

  1. 目标文件 (*.o)
  2. 静态库(*.a)
  3. 共享库(*.so)

共享库的顺序也很重要。如果 libfoo.so 依赖于 libbar.so,您应该列出-lfoo before -lbar.

如果您不知道确切的依赖关系,这可能会变得非常复杂。 Linux 上的以下命令可能会有所帮助:

ldd /path/to/libfoo.so

这列出了 libfoo.so 所依赖的所有共享库。

至于你的问题为什么你的特定 gcc 版本会出现这个问题,在不知道你的应用程序需要哪些库的情况下很难判断。但如果您应用我上面描述的顺序,它应该适用于较旧和较新的 gcc 版本。

提示:如果使用正确,CMake 可以为您处理所有依赖项...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gcc 链接库:参数顺序 的相关文章

  • 我如何公开我的IP,外部可以访问我的本地主机

    我只是想让我的IP公开 这样就可以从任何地方访问它 我正在使用ubuntu 18 04 已经安装了apache2和PHP 索引文件位于 var www html example com public html index php 在本地主机
  • docker:无法连接到位于unix:///var/run/docker.sock的Docker守护进程。 docker 守护进程是否正在运行?

    我通过 Visual Studio Code VScode 版本 1 66 远程连接到学校服务器 Ubuntu 20 04 2 LTS 来执行一些任务 今天我关注 docker com https docs docker com engin
  • 无法运行 android/sdk/build-tools/23.0.2/aapt

    最近在 Ubuntu 15 上安装了 Android Studio 1 0 1 由于某些原因是旧版本 我正在尝试创建一个新项目 每当我构建它时 我都会收到此错误 无法运行程序 home user Android Sdk build tool
  • 如何将输入传递到扩展汇编中?

    考虑这段代码 来自我的先前的问题 https stackoverflow com questions 37955538 segfault on movq instruction int main asm movq 100000000 rcx
  • gcc 中 -g 选项的作用是什么

    我看到很多关于 gdb 的教程要求在编译 c 程序时使用 g 选项 我无法理解 g 选项的实际作用 它使编译器将调试信息添加到生成的二进制文件中 此信息允许调试器将代码中的指令与源代码文件和行号相关联 拥有调试符号可以使某些类型的调试 例如
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • CPU Relax 指令和 C++11 原语

    我注意到许多使用特定于操作系统的原语实现的无锁算法 例如所描述的自旋锁here http locklessinc com articles locks 使用 Linux 特定的原子原语 经常使用 cpurelax 指令 使用 GCC 可以通
  • 伪分布式模式下的 Hadoop。连接被拒绝

    P S 请不要将此标记为重复 Hi 我一直在尝试以伪分布式模式设置和运行 Hadoop 当我运行 start all sh 脚本时 我得到以下输出 starting namenode logging to home raveesh Hado
  • apt-get install tzdata 非交互式

    当我尝试 apt get install y tzdata 将显示用于选择时区的命令行选项 我试图在脚本中使用它来进行一些设置 如何在没有用户输入的情况下使 apt get 运行 我知道重新配置 tzdata 我可以做 echo Ameri
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • Ubuntu 12.04 上的 DeepDive 安装指南

    在拥有以后很多问题 https stackoverflow com questions 22469188 deepdive installation postgresql error安装深潜项目 http deepdive stanford
  • 编译器如何实现位域运算?

    当询问如何做的问题时包裹 N 位有符号减法 https stackoverflow com questions 8309538 integer subtraction with wrap around for n bits我得到了以下答案
  • ELF动态符号表

    我有一个关于 ELF 动态符号表的问题 对于 FUNC 类型的符号 我注意到某些二进制文件中的值为 0 但在其他二进制文件中 它具有一些非零值 这两个二进制文件都是由 gcc 生成的 我想知道为什么会出现这种差异 有没有编译器选项来控制这个
  • pip:需要将包名称tensorflow-gpu更改为tensorflow

    我正在尝试将具有 GPU 支持的张量流安装到 conda 环境中 我使用命令 pip install ignore installed upgrade https storage googleapis com tensorflow linu
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • 为什么 gcc 链接时没有 lpthread 标志?

    我当时正在做一个业余爱好项目 其中互斥体的行为很神秘 我将其归结为这个显然应该陷入僵局的测试用例 include
  • 在GCC中添加父目录的包含路径

    我想将父目录中的文件包含在我正在处理的项目中 所有的头文件都在父目录中 有没有办法在命令行上使用 I 来搜索父目录中的包含而不使用绝对路径 我知道我可以使用 makefile 解决这些问题 并且我可能最终会这样做 但我想知道是否有一个可以使
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • Ubuntu 12.10 libgtk-3-0 缺少符号

    我正在运行 Ubuntu 12 10 不知何故我的 libgtk 3 0 搞砸了 当尝试运行许多不同的应用程序时 我收到如下错误 gedit symbol lookup error usr lib libgtk 3 so 0 undefin
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex

随机推荐

  • C# ListView DragDrop 事件方法每次拖放执行两次

    该方法连续执行两次 并且没有明显的理由这样做 它发生在 VS2010 Express 4 0 和 VS2008 3 5 中 public GUI InitializeComponent this lvwFiles DragDrop new
  • 将 RandomAccessSlice 转换为 RandomAccessCollection

    当我们尝试从一个数组中检索一系列元素时Array 我们得到一个ArraySlice let array 1 3 5 2 let arraySlice array lt 2 elements up to index 1 1 3 我们可以把它改
  • tox多次测试,重用tox环境

    是否可以使用单个 tox 虚拟环境执行以下操作 tox envlist test pylint flake8 mypy skipsdist true testenv lint deps pylint commands pylint test
  • 如何在android中使用.csv文件?

    我正在 Android 中做一个示例测验应用程序 我使用数组来存储问题和答案 现在我希望将问题和答案存储在 csv文件 是可以解析的 csv安卓中的文件 CSV 代表逗号分隔值 wiki 上可以找到很好的解释 CSV http en wik
  • 更改 Magento 产品页面上的文本“选择一个选项...”

    我创建了一个可配置的产品 它有三个选项 color size and style 现在在产品页面中 每个选项都有默认文本 选择一个选项 在下拉菜单中 但我希望文本应该是 选择颜色 选择大小 and 选择款式 我在 app code core
  • JSONDecodeError:需要 ',' 分隔符:第 1 行第 43 列(字符 42)

    我已经在这里读过很多例子了 不幸的是 我不断收到此错误 Error json decoder JSONDecodeError Expecting delimiter line 1 column 43 char 42 json 文件 peop
  • Puppeteer:无法启动浏览器进程!产卵

    当我尝试跑步时node app js 我收到错误 该消息是无法启动浏览器进程 产卵 Users iliebogdanbarbulescu Downloads firstProject node modules chromium lib ch
  • 文件系统树形视图

    我正在使用文件系统 并且我有一个文件对象的 List 这些文件对象将文件路径作为属性 基本上 我需要在 NET 中创建一个树视图 但我很难想出执行此操作的最佳方法 因为我需要从如下列表创建树结构 C WINDOWS Temp ErrorLo
  • 连接sql中的所有列值

    如何将从 sql 查询返回的不同行的所有列值合并为一个值 这是一个例子 查询返回 FOO RES1 RES2 RES3 现在我想要得到如下结果 FOOCONCAT RES1RES2RES3 有什么方法可以在sql中做到这一点吗 In SQL
  • 如何防止 MSI 错误:正在安装另一个程序?

    我编写了一个小 PowerShell 脚本 它调用不同的 MSI 文件来安装软件 有时我从 Windows Installer 中收到以下错误 正在安装另一个程序 请等待安装完成 然后再次尝试安装该软件 在调用 MSI 文件之前如何防止此错
  • 在 servlet 中从文件系统提供静态图像文件?

    如何通过 servlet 在文件系统中提供图像文件 看看这里 示例 Depot 在 Servlet 中返回图像 http www exampledepot com egs javax servlet GetImage html 链接已损坏
  • google-apps-script 用于编辑 Gmail 主题行

    问题是这样的 你可以搜索一下 发现很多人抱怨这个问题 假设您出售某种商品 例如经营一家在互联网上销售的小企业 并使用 PayPal 接受付款 PayPal 发送的每一条付款通知均具有完全相同的主题行 收到付款通知 因此 如果您收到 Bobb
  • KitKat版本之前的Android中如何获取短信应用程序(默认)的包名?

    Android KitKat版本之后 我们可以通过 Telephony sms getDefaultSmsPackage context 找到默认的短信包名称 但是如何获取 KitKat 版本之前的包名称呢 请参考这个http androi
  • 在线程之间划分奇数数量

    我刚刚学习 Java 中的线程 我想按字母顺序对单词列表进行排序 我的程序读取 txt 文件中的单词并将它们放入字符串数组中 用户可以自己选择要使用多少个线程 我想将数组分割成均匀 尽可能 的块 线程可以自行排序 所以我的问题是 如何在线程
  • 在父进程退出时杀死子进程

    我对 C 和编程非常陌生 需要一些帮助 在 linux cygwin 上的 c 中 我需要在退出时删除所有子进程 我看过其他类似的问题 但无法使其发挥作用 我试过了 atexit killzombies in parent process
  • 设定百分比内的局部最大识别(不利情况下触发 True)

    寻求识别 标志 True 何时 col1 中的当前值下降到低于 col1 中最近达到的局部最大值设定的百分比 这样就会有多个这样的信号 如达到最大值并且当前值下降设定的百分比 即自动重置 除了百分比之外没有设定阈值 请注意 标志 True
  • 使用 MSBuild 调用设置 AssemblyFileVersion?

    我们有一个基于批处理的构建过程 并且我们仅使用 MSBuild 从 Visual Studio 编译我们的项目文件 我们还将 wix 集成到我们的构建过程中 为了设置软件的版本 我们在主构建脚本中指定了一些在构建过程中使用的环境变量 我的问
  • php 框架中的全局变量开销

    我目前正在开发一个框架 它使用一个对象Core类 此类具有巨大的功能并使框架正常工作 该框架遵循 MVC 架构并具有松散耦合的模型 控制 视图类 这些类需要引用Core课重 到目前为止我所做的是 创建单个对象Core类并通过 PHP 关键字
  • Django REST Framework 和 MongoEngine 的 AttributeError

    我正在尝试将 Django 和 Django REST Framework 与 MongoEngine 一起使用 但它似乎对我不起作用 我不知道哪里出了问题 也许有人可以帮助我 这是代码 模型 py from mongoengine imp
  • 使用 gcc 链接库:参数顺序

    当我将 Ubuntu 发行版升级到 11 10 后 我开始看到 gcc 的奇怪链接器行为 我能够通过移动我的 lgcc 命令末尾的参数 我的问题与中描述的问题类似 这个线程 https stackoverflow com questions