尝试包含一个库,但不断收到“未定义的引用”消息

2023-12-07

我正在尝试使用 libtommath 库。我在 Ubuntu Linux 上的项目中使用 NetBeans IDE。我已经下载并构建了该库,我已经完成了“make install”以将生成的 .a 文件放入 /usr/lib/ 并将 .h 文件放入 /usr/include

它似乎正确地找到了文件(因为我不再收到这些错误,这是我在安装到 /usr 目录之前所做的)。

但是,当我创建一个简单的 main 来调用 mp_init (位于库中)时,当我尝试创建我的项目时,出现以下错误:

mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
gcc -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.c
mkdir -p dist/Debug/GNU-Linux-x86
gcc -o dist/Debug/GNU-Linux-x86/cproj1 build/Debug/GNU-Linux-x86/main.o
build/Debug/GNU-Linux-x86/main.o: In function 'main':
/home/[[myusername]]/NetBeansProjects/CProj1/main.c:18: undefined reference to `mp_init'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/cproj1] Error 1

所以,看起来链接器无法在库中找到该函数,但它确实在那里,所以我只是不知道是什么原因导致的。

如果我直接输入 gcc 命令并跳过 makefile,我也会得到同样的错误,我还确保静态库也用 gcc 编译。

编辑添加:

如果我直接编译并使用 -l 或 -L 添加库,我会得到这些相同的错误:

$ gcc -l /usr/lib/libtommath.a main.c 
/usr/bin/ld: cannot find -l/usr/lib/libtommath.a
collect2: ld returned 1 exit status

$ gcc -llibtommath.a main.c 
/usr/bin/ld: cannot find -llibtommath.a
collect2: ld returned 1 exit status

$ gcc -Llibtommath.a main.c 
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status

$ gcc -Llibtommath.a main.c 
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status

我对这些东西非常生疏,所以我不确定我在这里使用了正确的命令,在 -L 示例中是否找到了库?如果找不到图书馆,我到底如何让它找到图书馆?它在/usr/lib中,我已经用当前目录中的.a文件等进行了尝试。是否需要设置环境变量?如果是的话,如何进行等等。

我尝试过一个完全不同的库(GMP)并且遇到了完全相同的问题。这一定是某种 Ubuntu 环境问题吗?有人知道如何解决这个问题吗?


这里的技巧是将库放在您正在编译的模块之后。问题是一个参考的东西。链接器按顺序解析引用,因此当库位于正在编译的模块之前时,链接器会感到困惑,并且认为不需要库中的任何函数。通过将库放在模块之后,模块中对库的引用将由链接器解析。

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

尝试包含一个库,但不断收到“未定义的引用”消息 的相关文章

随机推荐

  • iPhone 在状态栏中添加图标(如电池指示器)

    我想知道是否可以在 iPhone 状态栏上添加一个图标 就像电池和 WiFi 指示器一样 我怎样才能做到这一点 Thanks 正如之前报道的 使用 SDK 无法做到这一点 如果您在越狱环境中工作 则状态栏图标需要放置在 System Lib
  • 将内联 SVG 保存为 JPEG/PNG/SVG

    我的 html 中有一个内联 SVG 我需要能够将其保存为 JPEG PNG 或 SVG 我尝试了几种不同的方法 将 SVG 转换为画布 然后转换为 JPEG 但我无法使这些方法正常工作 这是我的内联 SVG 的示例 font color
  • 将.CSV转换为.DBF(dBASEIII) VFP 6.0,一切都变成备注字段

    我正在尝试使用 python 将 excel 文件转换为 dbf dBASEIII 我当前的流程是 使用 xlrd 将 excel 文件转换为 csv 我从 csv 中取出标题并使用 获取新制作的 csv并使用dbf模块 https pyp
  • 何时断开与应用程序服务器建立的 bosh 连接以在 strope 中使用预绑定?

    这个问题是我之前关于这个问题的延伸 如何使用java smack库连接XMPP bosh服务器 我使用 Java 作为服务器端语言 我已经使用 smach jbosh 成功实现了 xmpp BOSH 连接 感谢 Deuteu 帮助我实现了这
  • 链接静态库时避免链接未使用的符号

    我正在使用苹果海湾合作委员会编译一个我要重新分发的 dylib 由于各种原因我正在使用一些库 比方说libz为了保持简单 由于这个库通常在 Mac 系统上找不到 我希望静态链接在通过将路径传递给 dylib 使用符号 a file以简化部署
  • C++ 犰狳访问三角矩阵元素

    访问犰狳矩阵的上三角或下三角元素的最有效 即平衡内存和速度 的方法是什么 我知道我可以为元素提供一个整数向量 但随着矩阵变得非常大 我希望避免携带另一个大向量 或者有没有一种有效的方法来快速创建下 上三角指数 例如 5x5 矩阵 C 11
  • 在多个VHost之间共享配置

    我正在管理一个 httpd 安装 其上运行多个站点 每个站点都在其自己的内部定义
  • IE 想要下载 JSON 结果....MVC3

    我的 MVC3 应用程序将用户的文档上传到我们的服务器 我返回一个 JsonResult 以显示任何错误 如果有 HttpPost public JsonResult SaveDocument DocumentModel model Htt
  • 如何使用带有 JSON 数据的 jquery 模板?

    我正在尝试编写一些 jquery 代码来从云帐户检索服务器列表并将它们显示在表格中 当我加载页面时 我的 JavaScript 会执行并返回正确的 JSON 但是当我尝试使用 jquery 模板生成 html 时 我永远不会得到任何输出 谁
  • 使用正则表达式查找页面上而非锚点中的电话号码

    我有这个搜索电话号码模式的正则表达式 d 3 s d 3 s d 4 这会匹配以下格式的电话号码 123 456 7890 123 456 7890 123 456 7890 123 456 7890 123 456 7890 123 45
  • 从数据集和数据表生成水晶报表

    我需要在一个应用程序中的 Crystal Reports 中生成一个报告 其中只有一个独立的数据集 未连接到任何类型的数据库 另外 我需要根据数据表中的值生成报告 能否请您指点一下 我是新手 我有一个模板 但我不知道如何从数据表生成报告 也
  • Spring Boot 错误:由于缺少 EmbeddedServletContainerFactory bean,无法启动 EmbeddedWebApplicationContext

    我正在尝试使用 Spring Data GemFire 将数据放入 GemFire 中 我跟着这个link Region stockdata public class StockInfo Id public String symbol pu
  • 通过 N 列块重塑 Pandas 数据框列

    我有 1 个数据框 其中的列块需要重新调整为行 我尝试使用 stack 和 Melt 但无法找到正确的方法 这是我期望的一个例子 data id a1 a2 a3 a4 year 20 20 19 18 b A 1 2 3 4 b B 5
  • 我在关于 c++ 的声明中遗漏了什么吗?

    除了声明 定义和预处理器指令之外 您不能在函数之外使用代码 这个说法准确吗 还是我遗漏了什么 我正在教我的侄子编程 他试图在 main 之前添加一个 while 循环 他还很年轻 我想给他一个他能理解的简单的硬规则 不完全是 你还可以将表达
  • 就渲染时间和性能而言,面板按什么顺序最有效?

    很多时候 多个面板都适合我想要的布局 但我知道不同面板类型的渲染时间存在差异 例如 MSDN指出 一个比较简单的Panel 例如Canvas 可以显着地 比更复杂的性能更好Panel 例如Grid 那么就渲染时间和性能而言 WPF 面板按什
  • NSNumber >= 13 不会保留。其他一切都会

    我当前正在处理的代码需要将 NSNumber 对象添加到数组中 所有值为 0 12 的 NSNumber 都可以正常添加 但 13 以后会导致 EXC BAD ACCESS 我打开 NSZombieEnabled 现在得到 CFNumber
  • IIS 站点节点不会扩展

    我昨天在本地 IIS 上添加了一个新网站 Windows 8 1 上的 IIS 8 5 添加后 IIS 无限期地挂在加载循环中 最终我不得不通过任务管理器终止它 昨晚很晚了 我屈服了 关掉了电脑 今天早上我的网站都不起作用 全部都返回了No
  • 将标题添加到 xtable

    我不确定这是 R 问题还是 Sweave 问题 我正在一个简单的表格中查看 2 个时间点的学生分数 3 年级和 6 年级 我已经创建了表格并打印出来 但是我想添加标签 以便人们知道哪个分数来自哪个年级 我的 Sweave 代码是 lt
  • 将 XML 转换为动态 C# 对象

    我使用以下 C 代码通过 JSON Net 框架将 JSON 数据字符串转换为动态对象 Creates a dynamic Net object representing the JSON data var ProductDB JsonCo
  • 尝试包含一个库,但不断收到“未定义的引用”消息

    我正在尝试使用 libtommath 库 我在 Ubuntu Linux 上的项目中使用 NetBeans IDE 我已经下载并构建了该库 我已经完成了 make install 以将生成的 a 文件放入 usr lib 并将 h 文件放入