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

时间:2013-03-12 06:54:14

标签: c compiler-errors mcrypt

我创建了一个使用 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中编译命令是前一个(可能有些文件在顺序或某些库中有所不同)。

有人可以解释一下标志顺序如何影响编译的成功或失败?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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