1

我创建了一个使用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 模块。

经销商编号: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/包含/路径 -lother_lib -o ./bin/out

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

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

4

2 回答 2

3

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

于 2013-03-12T10:27:56.263 回答
1

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

于 2013-03-12T07:22:20.390 回答