2011-04-17 5 views
1

JNIでJavaから呼び出されるC++コードをコンパイルする必要があります。これらのC++関数はアセンブリ関数(NASMでアセンブル)を呼び出さなければなりません。 JNIはアセンブリ関数のラッパーです。MSVC++コンパイルのみ/リンカーを無効にする

しかし、NASMによって生成された.objファイルとリンクできる.dllにコードがコンパイルされる前に、未定義の外部参照をアセンブリ関数に解決できません。だから、C++モジュールをビルドするときに苦情がないようにリンカーを「無効にする」方法はありますか? (セミコロンで区切られた)Additional Dependenciesリストにあなたのobjファイルを追加し、NASMによって生成objファイルにリンクあなたのC++プロジェクトのプロパティを開き、Configuration Properties > Linker > Inputを選択するには

+1

スタティック/ダイナミックライブラリ、またはそこから呼び出されたものをビルドする必要があります。 – fazo

+0

どのC++コンパイラを使用していますか、どのバージョンですか? IDEまたはコマンドラインからそのコードをビルドしていますか? –

+1

本当の問題はNASMライブラリをC++コードにリンクできないことですね。 – Andrey

答えて

1

+0

私のfunc.objファイルが壊れていると主張していますが、どのようにNASMで.objファイルを生成しますか? – Benjamin

+0

@ベンジャミン、Visual Studio 2010リンカは、独自のCOFFオブジェクトファイル形式の変形のみをサポートしています。どうやら、その形式のオブジェクトファイルを取得するためには、 '-f win32'オプションを(-f coff'ではなく)NASMに渡す必要があります。 –

+0

ああありがとう:)。しかし、私はまだリンク時に "未解決の外部シンボル"エラーが発生します。これは出力です:func.obj:エラーLNK2001:未解決の外部シンボル_sum 1> crash.obj:エラーLNK2019:未解決の外部シンボル "int __cdecl sum(int、int)"(?sum @@ YAHHH @ Z)関数_Java_Crash_sum @ 16 – Benjamin

関連する問題