我创建了一个使用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 中编译命令是前一个(可能某些文件的顺序或某些库不同)。
谁能解释一下标志顺序如何影响编译成功或失败?