0

Microsoft Visual Studio 2008 を使用して、C++ 用の NTL inifite 精度整数演算ライブラリをコンパイルしました。このサイトで説明されているように、コマンド プロンプトからではなく、Visual Studio インターフェイスを使用して行いました。実際にはコマンド プロンプトから実行したいのですが、方法がわかりませんでした。

とにかく、ライブラリをコンパイルしたので、コマンドプロンプトからライブラリを使用してプログラムをコンパイルしたいと思います。コンパイルしようとしているプログラムは、Linux システムでテストされており、次のようにコンパイルします。

c++ -I/appl/htopopt/Linux_x86_64/NTL-5.4.2/include mpqs.cpp main.cpp -o main -L/appl/htopopt/Linux_x86_64/NTL-5.4.2/lib -lntl -L/appl/htopopt/Linux_x86_64/gmp-4.2.1/lib -lgmp -lm

gmpのことは気にしないでください。Windowsにはインストールしていません。NTL の実行を高速化するのは、純粋にオプションです。とにかく、これはLinuxでうまく動作します。Windowsでは、次のように記述します

cl /EHsc /I D:\Downloads\WinNTL-5_5_2\include mpqs.cpp main.cpp /link /LIBPATH:"D:\Documents\Visual Studio 2008\Projects\ntl\Debug"

しかし、これにより次のエラーが発生します。

mpqs.cpp
mpqs.cpp(38) : error C2039: 'find_smooth_vals' : is not a member of 'QS'
        d:\desktop\qs\mpqs.h(12) : see declaration of 'QS'
mpqs.cpp(41) : error C2065: 'M' : undeclared identifier
mpqs.cpp(41) : error C2065: 'n' : undeclared identifier
mpqs.cpp(42) : error C2065: 'sieve_table' : undeclared identifier
mpqs.cpp(42) : error C2228: left of '.size' must have class/struct/union
        type is ''unknown-type''
mpqs.cpp(43) : error C2065: 'sieve_table' : undeclared identifier
mpqs.cpp(44) : error C2065: 'qx_table' : undeclared identifier
mpqs.cpp(44) : error C3861: 'test_smoothness': identifier not found
mpqs.cpp(45) : error C2065: 'smooth_indices' : undeclared identifier
mpqs.cpp(45) : error C2228: left of '.push_back' must have class/struct/union
        type is ''unknown-type''
main.cpp
Generating Code...

私の mpqs.h ファイルがコンパイル プロセスに含まれていないようです。また、ベクター型の .push_back() について不平を言う理由がわかりませんか?

助けていただければ幸いです。

4

1 に答える 1

0

mpqs.h は、出力で参照するように求められるため、間違いなく含まれています。

MPQS.h が NTL ライブラリに含まれていないように見えますが、作成したのですか? もしそうなら、あなたはコードを投稿できますか?

また、ビルドのどこかにライブラリ ファイルを含めるべきではありませんか?

編集: 関数 find_smooth_values がないのに、MSVC がそれを見つけると期待する必要があるのはなぜですか? なぜGCCでコンパイルできるのかわかりませんが、明らかに欠けています。これが原因で他のエラーが発生していると思います。エラーはあなたに物事を伝えています。あなたは彼らに耳を傾けるべきです。

push_back は、push_back しようとしているタイプがわからないため失敗しています。これもおそらく、find_smooth_values が存在しないことが原因です。関数プロトタイプを QS クラスに追加してみてください。これにより、すべての問題が解決する可能性があります。

ライブラリに関しては、コンパイルが成功するまでライブラリを使用できません。ですから、今は心配しないでください。そこに入って、MSVC が報告しているエラーを修正してください!

于 2010-04-12T10:16:18.637 に答える