2013-03-12 2 views
1

Я создал программу C, которая использует libmcrypt. Я собирал его много раз в машине CentOS, но теперь, пытается сделать то же самое в Ubuntu, я получаю это:Невозможно скомпилировать программу на Ubuntu, которая использует libmcrypt

/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 и spacified флаги должным образом при компиляции (-I/USR/включать -L/USR/Lib -lmcrypt)

Может кто-нибудь наставит меня о том, как получить работу компиляции правильно с libmcrypt?


EDIT: страницы человека говорит: Compile как "куб.см prog.c -lmcrypt", или "куб.см prog.c -lmcrypt -lltdl" в зависимости от вашей установки. Я также установил libltdl-dev, но он не работает.


EDIT 1: информация система: версия (работает uname -r):

3.5.0-25-родовой

релиз (работает lsb_release -a):

Нет доступных модулей LSB.

Дистрибьютор ID: Ubuntu

Описание: Ubuntu 12,10

выпуска: 12,10

Codename: квантовое


EDIT 2:

Поскольку @teppic просилмне показать команду компиляции, я решил свою проблему, но мне нужны объяснения. Пыльник я подробно тему:

команду, которую я так и не удалось:

куб.см -Wall -I ../ путь/к/включать -lmcrypt ./a_file.c ./some/ другой/file.c ./some/other/files.c ./main/file.c -I/некоторые/включить/путь -lother_lib -o ./bin/out

После этого я только положить -lmcrypt в конце команды и удалил его с первого места, и он сработал. В моем первоначальном вопросе я сказал вам, что я скомпилировал его раньше в CentOS, и все сработало нормально. Это правда, даже если в CentOS команда компиляции была первой (возможно, некоторые файлы различаются по порядку или некоторые библиотеки).

Может ли кто-нибудь объяснить мне, как порядок флагов влияет на успех компиляции или неудачу?

+2

Вы установили 'libmcrypt-dev'? –

+0

@WillPalmer да, я также установил * libltdl-dev * и включил его, но такое же поведение. – artaxerxe

+0

Вы можете дать точную информацию о ОС? – acarlow

ответ

3

В общем случае вы должны поместить библиотечную зависимость после исходного файла, который ссылается на него в командной строке. В старых версиях gcc это не всегда так.

0

1) Попробуйте установить libmrypt-DEV 2) Найдите путь libmcrypt с помощью «найти» команду 3) Если нет в стандартном пути к библиотеке, попробуйте добавить путь к переменной окружения LD_LIBRARY_PATH 4) Если ничего не помогает попробуйте установить снова используя «yum install mcrypt-devel»

+0

Что такое libwock32? Я не могу найти такую ​​библиотеку. – artaxerxe

+1

yum? Он использует ubuntu. – LtWorf

+0

@LtWorf http://packages.ubuntu.com/hardy/yum u есть пакет yum для ubuntu – hazzelnuttie

Смежные вопросы