我创建了一个使用 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中编译命令是前一个(可能有些文件在顺序或某些库中有所不同)。
有人可以解释一下标志顺序如何影响编译的成功或失败?
答案 0 :(得分:3)
通常,您应该在之后将库依赖项放在命令行中引用它的源文件中。在旧版本的gcc中,情况并非总是如此。
答案 1 :(得分:1)
1)尝试安装libmrypt-dev 2)使用“locate”命令找到libmcrypt的路径 3)如果不在标准库路径中,请尝试将路径添加到LD_LIBRARY_PATH环境变量 4)如果没有任何帮助尝试使用“yum install mcrypt-devel”再次安装