【问题标题】:Cannot compile program on Ubuntu that uses libmcrypt无法在使用 libmcrypt 的 Ubuntu 上编译程序
【发布时间】: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。

标签: c compiler-errors mcrypt


【解决方案1】:

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

【讨论】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 2011-10-16
    • 2012-02-27
    • 2012-12-06
    相关资源
    最近更新 更多