无法在使用 libmcrypt 的 Ubuntu 上编译程序

Posted

技术标签:

【中文标题】无法在使用 libmcrypt 的 Ubuntu 上编译程序【英文标题】:Cannot compile program on Ubuntu that uses libmcrypt 【发布时间】:2013-02-27 14:31:29 【问题描述】:

我创建了一个使用 libmcrypt 的 C 程序。我在 CentOS 机器上编译了很多次,但现在,尝试在 Ubuntu 中做同样的事情,我得到了这个:

/tmp/ccM2ugbq.o: In function `encrypt': 
util.c:(.text+0xa1): undefined reference to `mcrypt_module_open'
util.c:(.text+0xc6): undefined reference to `mcrypt_enc_get_iv_size'
util.c:(.text+0x134): undefined reference to `mcrypt_generic_init'
util.c:(.text+0x1dc): undefined reference to `mcrypt_generic'
util.c:(.text+0x1fa): undefined reference to `mcrypt_module_close'
/tmp/ccM2ugbq.o: In function `decrypt':
util.c:(.text+0x288): undefined reference to `mcrypt_module_open'
util.c:(.text+0x296): undefined reference to `mcrypt_enc_get_iv_size'
util.c:(.text+0x304): undefined reference to `mcrypt_generic_init'
util.c:(.text+0x375): undefined reference to `mdecrypt_generic'
util.c:(.text+0x380): undefined reference to `mcrypt_module_close'

,虽然我已经安装了 libmcrypt 并在编译时正确地指定了标志(-I/usr/include -L/usr/lib -lmcrypt

谁能指导我如何使用 libmcrypt 使编译正常工作?


编辑:手册页说:编译为“cc prog.c -lmcrypt”或“cc prog.c -lmcrypt -lltdl”,具体取决于您的安装。 我也安装了libltdl-dev,但是还是不行。


编辑 1: 系统信息: 版本(运行uname -r):

3.5.0-25-通用

发布(运行lsb_release -a):

没有可用的 LSB 模块。

分销商 ID:Ubuntu

描述:Ubuntu 12.10

发布:12.10

代号:量子


编辑 2:

因为@teppic 要求我显示编译命令,我解决了我的问题,但我需要一些解释。下面我将详细介绍该主题:

我使用但失败的命令:

cc -Wall -I../path/to/include -lmcrypt ./a_file.c ./some/other/file.c ./some/other/files.c ./main/file.c -I /some/include/path -lother_lib -o ./bin/out

之后,我只将-lmcrypt 放在命令末尾并从一开始就将其删除,并且它起作用了。 在我最初的问题中,我告诉过你我之前在 CentOS 中编译过它,并且一切正常。确实如此,即使在 CentOS 中编译命令是前者(可能某些文件的顺序或某些库不同)。

谁能解释一下标志顺序如何影响编译成功或失败?

【问题讨论】:

你安装libmcrypt-dev了吗? @WillPalmer 是的,我也安装了 libltdl-dev 并包含它,但行为相同。 你能提供确切的操作系统信息吗? 您用于编译的确切命令是什么? @teppic 查看我的编辑 2。 【参考方案1】:

1) 尝试安装 libmrypt-dev 2) 使用“locate”命令定位 libmcrypt 的路径 3)如果不在标准库路径中,请尝试将路径添加到 LD_LIBRARY_PATH 环境变量 4) 如果没有任何帮助,请尝试使用“yum install mcrypt-devel”再次安装

【讨论】:

什么是 libwock32?我找不到这样的图书馆。【参考方案2】:

一般而言,您应该将库依赖项放在在命令行中引用它的源文件之后。在旧版本的 gcc 中,情况并非总是如此。

【讨论】:

以上是关于无法在使用 libmcrypt 的 Ubuntu 上编译程序的主要内容,如果未能解决你的问题,请参考以下文章

C Libmcrypt 无法成功加密/解密

Meteor MCrypt 应用程序无法在 heroku 上编译,因为它缺少 libmcrypt4 等

解决libmcrypt was not found,无法安装mcrypt

Ubuntu 14.04.2 Laravel 4.2.0 PDOException找不到驱动程序MySQL

libmcrypt 不可靠吗?

ubuntu下完全安装mcrypt