1

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を使用してコンパイルを適切に機能させる方法を教えてもらえますか?


編集: man ページには次のように書かれています: インストールに応じて、「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/インクルード/パス -lother_lib -o ./bin/out

その後、-lmcryptコマンドの最後に を入れて最初から削除しただけで、うまくいきました。最初の質問で、CentOS で以前にコンパイルしたことがあり、すべて正常に動作したと言いました。CentOSでコンパイルコマンドが前者だったとしても、それは本当です(おそらく、一部のファイルの順序が異なるか、一部のライブラリが異なります)。

フラグの順序がコンパイルの成功または失敗にどのように影響するかを誰かに説明できますか?

4

2 に答える 2

3

一般に、コマンド ラインでそれを参照するソース ファイルのに、ライブラリの依存関係を配置する必要があります。古いバージョンの gcc では、これは必ずしもそうではありませんでした。

于 2013-03-12T10:27:56.263 に答える
1

1) libmrypt-dev をインストールしてみてください 2) 「locate」コマンドを使用して libmcrypt のパスを見つけます 3) 標準ライブラリ パスにない場合は、パスを LD_LIBRARY_PATH 環境変数に追加してみてください 4) 何も解決しない場合は、「yum install mcrypt-開発する」

于 2013-03-12T07:22:20.390 に答える