2017-05-31 16 views
0

私は複数のPDFのlybraryを試してみました.MUPDFは自分の小さなPDFアプリケーションを作成する最後のチャンスです。しかしここでも私は問題があります。それ以前はLNK4098:defaultlib 'MSVCRT'に問題がありましたが、すべてのMUPDFライブラリ/ MDdバージョンを設定するように解決しました。ほとんどのエラーは、後に解決され、それでも私はこの問題を解決することはできません。C++でのCライブラリのコンパイル。リンクの問題。 MuPDF

error LNK2001: unresolved external symbol "void __cdecl pdfapp_open(struct pdfapp_s *,char *,int)" ([email protected]@[email protected]@[email protected]) 
//more 3 errors 

Cで書かれたMuPDFとして、私はこれを実行します。

extern "C" { 
#include <pdfapp.h> 
#include <mupdf\fitz\context.h> 
} 

をしかし、私はこのエラーを取得:

error LNK2001: unresolved external symbol pdfapp_open 
//more 3 errors 

私のアプリケーションには3つの機能しかありません。私はlibsとヘッダーのリンクをチェックし、私は私のプロジェクトDebug、x64、/ MDdも設定しましたが、同じようになります。 正直なところ、私はこの3つの機能を誰のライブラリでも見つけることはできません。私はプログラミングの専門家ではないが、関数の文字列はlibsで見つけるべきであることを知っている?私の場合、このエラーはどういう意味ですか?

+3

CとC++は異なる言語です。彼らはプログラムを書くのに十分な大きさの共通のサブセットを持っていますが、両方の規格に準拠するように特に書かれていないプログラムは、ある言語や他の言語では無効である可能性が高いです。 Cライブラリをお持ちの場合は、Cコンパイラでビルドしてください。 MSVC++は、Cモードで動作しているときは準拠しているCコンパイラではなく、C++モードで動作しているときは*適合*していません。 Cのコードは、あなたの特定のCコードをビルドするのに十分かもしれませんが、特に古いコードの場合はそうです。 –

+0

@ John Bollinger私はextern CがC nとC++の間の互換性を解決しなければならないと考えました。 (説明をありがとうございます。 – hardCode

+0

あなたは既にこの質問を投稿しました。それは重複していました。あなたが削除した古い質問を表示する権限がありませんが、 – tambre

答えて

0

リンカがmupdfのインポートライブラリを見つけられないか、名前のマングリング/デコレーションタイプの問題があります。

mupdfをダウンロードしてビルドしたら、リンク先のインポートライブラリが必要です。あなたはそれにリンクしていますか?リンカ>>入力>>追加の依存関係のプロジェクトリンカ設定を見てください。そのようなインポートを追加しましたか?

それ以外の場合は、追加してください。見つけにくいはずです。ダウンロードした(またはビルドした)mupdf DLLのすぐ隣にあります。

これを追加したと仮定して、次のステップは、正しく見つかったことを確認することです。ビルドの出力を見てください。あなたはそれについて警告を受けていますか?いいえ、リンカ>>一般>> Show Progressを「すべての進行メッセージを表示する」に変更し、再度ビルドします。ライブラリや機能に関する警告はありますか?

私が考えることができる最後の可能性は、DLLがextern "C"ではなく、C++(つまり名前の装飾)としてその関数を実際にエクスポートしているということです。その場合、あなたのextern "C"括弧はそこに属しません。または、逆の場合もあります(つまり、#includeにすべての場所でextern "C"を使用できなかった可能性があります)。私はあなたの例がそれを使用しているのを見ることができますが、それはすべての場所ですか?

mupdf.DLLをビルドする場合、クライアントコードと同じ方法で、同じ呼び出し規約でビルドされていることを確認してください。