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でコンパイルコマンドが前者だったとしても、それは本当です(おそらく、一部のファイルの順序が異なるか、一部のライブラリが異なります)。
フラグの順序がコンパイルの成功または失敗にどのように影響するかを誰かに説明できますか?