对静态库中定义的函数的“未定义引用”

2024-06-27

我正在尝试构建一个在应用程序中使用的库。我如下构建了库,当我编译应用程序时,出现以下错误:

我已经做了以下事情。

I use:

gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 

在从应用程序调用的库中:

这里我有很多模块,但是这个库的入口点是 func() (即, main () 被替换为 func() 以便我可以调用该模块,并且 func () 没有声明为“静态”。)

在其中一个文件中:

int func ();
...

int func () 
{ ... } 

然后将库构建为:

gcc -Wall file.c -o file.o
...
...

ar rvs libfun.a $(OBJS)

还分别在 libfun.a 上使用 ranlib 和 nm -s 来构建符号表, 但使用这些命令后,存档的总大小没有改变,并且仍然出现链接错误。 这里 $(OBJS) 包含所有目标文件

在应用中:

外部 int func ();

编译:

gcc -Wall -L./path-to-lib  -lfun  -o appl

然后我收到以下错误:

In function `main':
undefined reference to `func()'
collect2: ld returned 1 exit status

我尝试使用“ar s”和“ranlib”构建符号表,但结果是相同的。

我观察到的一件事是我构建的“ar”的内容与其他模块项目中已经存在的档案存在差异。

我构建的存档包含(输出为“nm -s libfun.a”):

Archive index:
Cfg1 in f1.o
mCfg1 in f1.o
dpCfg in f1.o

但我正在使用的其他档案没有任何更改包含以下奇怪的模式:

Archive index:
_Z29platformSetjP38tagTCPIP_INTERFACE_INSTANCE_ATTRIBUTES in platform.o
_Z27platformTestSetTcpjP20tagTCPIP_CONFIG_DATAPh in platform.o
_Z23platformSetTcpIpjP20tagTCPIP_CONFIG_DATA in platform.o

我不确定上面有什么区别。它是共享库还是静态库?

我正在尝试使用 GCC 进行编译并使用“ar”构建存档,但其他库文件可能正在使用 g++ 编译器。我不知道。以防万一它很重要。

在构建我的图书馆时我做错了什么?请帮忙?

Regards.


另一个原因可能是你的顺序不正确-lxx.

简而言之,把-lrelied after -lrelying.

see here https://stackoverflow.com/a/28706445/5413164.

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

对静态库中定义的函数的“未定义引用” 的相关文章

随机推荐

  • vuejs 2.0.0 中选择的占位符

    我正在使用创建一个网络应用程序vuejs 2 0 https vuejs org guide forms html 我使用以下代码创建了简单的选择输入
  • C# 集合按属性索引?

    我经常遇到的一个问题是需要以这样的方式存储对象集合 以便我可以通过作为该对象的唯一 索引 的特定字段 属性来检索它们 例如 我有一个Person对象为name字段是一个唯一标识符 我希望能够从某个集合中检索Person反对Person wh
  • Bootstrap 列优于行

    我想知道以下是否可能 在小型设备上 我想要 A B C 但在中等 设备上 我想要 A C B 我尝试过以下代码 div class row div class col xs 12 col md 6 A div div class col x
  • 是否有一个列表解释所有 TFS 版本控制图标符号的含义?

    我不知道微软已经发布了TFS图标符号及其含义的列表 拥有这样一个列表将会很有帮助 例如 下图中的图标代表什么意思 我对这两个符号的猜测是 1 绿色合并符号表示合并文件夹尚未加载到工作区中 2 绿色加号表示工作区中创建的文件夹尚未检入服务器
  • 数据太长,导致列错误(包含国家字符)

    我必须移植一些DBS变成独立的MySQL版本 5 0 18运行于Windows 7 64 位我遇到了一个困扰我的问题 如果我尝试将任何国家 Unicode 字符插入varchar我收到错误 ERROR 1406 22001 Data too
  • Vagrant 无法转发此虚拟机上的指定端口

    我将 Vagrant 用于一盒配置文件 现在我想对另一个盒子 b2 使用 Vagrant 但它说 bioiq 的实例正在消耗转发的端口 2222 确实如此 现在 如果我使用以下配置 b2 Vagrant 仍然尝试使用 2222 Vagran
  • 使用 Scala 的解析器组合器时如何忽略不匹配的前面文本?

    我真的很喜欢解析器组合器 但是当我不关心相关文本之前的文本时 我对我提出的提取数据的解决方案并不满意 考虑这个小型解析器来获取货币金额 import scala util parsing combinator case class Amou
  • 基于 PHP 的 CSV 编辑器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道用 PHP 编写的在线 CSV 编辑器允许用户打开 编辑和保存给定的 CSV 文件 我能找到的只
  • 两个闪亮的操作按钮

    我正在编写一个闪亮的函数 其中包含两个操作按钮 这两个按钮是左右按钮 单击时可以帮助绘图移动 第一次单击时 这两个按钮都工作正常 当我重新单击它们时 就会出现问题 无论我单击哪个按钮 它都会在两个范围之间来回弹跳 我猜可能是 右 和 左 按
  • 无法以静默方式或使用 msal-browser 通过重定向获取令牌

    我正在尝试开发一个 VueJS 单页应用程序 将您登录到 AAD 以便我可以获得访问令牌来调用各种 API 例如 Graph 用户登录后 您必须获取令牌 有两种方法可以执行此操作 静默 如果失败 则使用重定向体验 但是 我无法使用这两种方法
  • 在 symfony2 中为特定控制器设置 max_execution_time

    Using ini set 我可以扩展最大执行时间一个脚本的 在Symfony2 我可以添加ini set to web app php and web app dev php将增加的执行时间应用于所有控制器 但在这种情况下 我只想扩展最大
  • 如何在Jquery数据表中选择一行

    我在用数据表 http datatables net 在我的应用程序中 每当用户单击任何行时 我想突出显示它并从所选行中选择一些值 oTableTools sRowSelect single fnRowSelected function n
  • 为什么 localInit Func 在 Parallel.ForEach 中每个线程被调用多次

    我正在编写一些代码来处理大量数据 我认为让 Parallel ForEach 为它创建的每个线程创建一个文件会很有用 这样输出就不需要同步 至少对我而言 它看起来像这样 Parallel ForEach vals new ParallelO
  • RestSharp反序列化JSON内容(代表一个对象包含字节数组)错误

    Client端收到正式的JSON内容 Id 1 2 3 Size 56 但在反序列化字节数组时出现错误 1 下面的语句出现错误 IRestResponse
  • 如何在每个批处理脚本运行后清除变量?

    看来 由于我使用 SET 在批处理脚本中声明变量 如果我在 cmd 中运行多次 变量值将持续存在 除非我显式重置它们 我是否必须使用 setlocal 和 endlocal 来确保一次运行中的变量不会在不关闭 CMD 的情况下持续到另一次运
  • Django - 在处理端点请求之前验证 AWS Cognito 令牌是否有效

    因此 我使用下面的代码来检查 AWS Cognito 令牌 我显然不想将这 6 行代码添加到每个端点 另外 我不知道这是否是验证我正在做的所有事情的正确方法 即期望令牌的格式为 解析它并仅解码 JWT 令牌部分 如何对每个请求附带的 AWS
  • 如何按键按字母顺序对 Ruby 哈希进行排序

    我正在尝试按键按字母顺序对哈希进行排序 但如果不创建自己的排序类 我似乎无法找到一种方法来做到这一点 我发现下面的代码可以按值排序 如果它是整数 我正在尝试修改它 但没有任何运气 temp ninjas 36 temp pirates 12
  • 如何使用箭头键在 JPanel 中移动对象

    我正在尝试使用 Windowbuilder 创建一个小程序 它只需在 JPanel 中绘制一个红色矩形 称为 car1 然后按箭头键移动它 为此 我将与箭头关联的一个方法来更改 x 位置 调用重绘方法 但矩形根本不移动 因此我可能会用 Ke
  • AppHarbor 一步构建以及如何部署我的数据库[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我终于达到了我的解决方案完成构建步骤
  • 对静态库中定义的函数的“未定义引用”

    我正在尝试构建一个在应用程序中使用的库 我如下构建了库 当我编译应用程序时 出现以下错误 我已经做了以下事情 I use gcc version 4 6 3 Ubuntu Linaro 4 6 3 1ubuntu5 在从应用程序调用的库中