2016-09-14 9 views
0

何が問題なのかよく分かりません。私は問題を説明し、次に何が起こっているのかを理解する。それは簡単なコードです:LNK2019:1行目の.objファイルの未解決の外部シンボル__imp__

#include <iostream> 
#include <stdio.h> 
#include "stdafx.h" 
#include <iViewNG-Core.h> 

int main(int argc, char ** args) { 

    iViewVersion version; 
    iViewRC rc = iView_GetLibraryVersion(&version); 

    if (RC_NO_ERROR != rc) 
     printf("ERROR returned by iView_GetLibraryVersion(): %d\n", rc); 

    printf("The version of the libiViewNG is: %u.%u.%u.%u\n", version.major, version.minor, version.patch, version.build); 

    return 0; 
} 

エラーの説明:SMI_TrialTestsのC _main関数内で参照さ4 @未解決の外部シンボル __imp__iView_GetLibraryVersion

エラーLNK2019:Rakshit \ドキュメントは、Visual Studio 2015 \プロジェクト\ \ユーザー\ \ SMI_TrialTests \ SMI_TrialTests \ SMI_TrialTests.obj

私は自動フィルは私がファイルで宣言された関数を使用することができますので、コードが実際にiViewNG-Core.hを読んでいることを確認しました。私はlibとincludeディレクトリを適切なVC++ディレクトリに正しく追加することでこれを行いました。これはリンカの問題なので、どこが間違っていますか?

私はC++には新しく、重複したLNK2019の質問があることを知っていますが、どれも自分の問題を解決していないようです。

リンカ出力:

/OUT: "C:\ Users \ユーザーrakshitドキュメントは、Visual Studio 2015プロジェクト\ \ SMI_TrialTests \デバッグ\ SMI_TrialTests.exe \ \"/MANIFEST /NXCOMPAT/PDBを:」 「kernel32.lib」「user32.lib」「gdi32.lib」「winspool.lib」「comdlg32」のように入力してください。c:\ users \ rakshit \ documents \ visual studio 2015 \ Projects \ SMI_TrialTests \ Debug \ SMI_TrialTests.pdb "/ DYNAMICBASE " kernel32.lib "" user32.lib " "lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"/DEBUG/MACHINE:X86/INCREMENTAL /PGD : "c:\ users \ rakshit \ do "level = 'asInvoker' uiAccess = 'false'" /ManifestFile:"Debug\SMI_TrialTests.exe.intermediate。このファイルには、次のファイルが含まれています。マニフェスト」 /ERRORREPORT:PROMPT/NOLOGO/VERBOSE/LIBPATH: "C:\のiView NG SDK \ LIB \ LIB-Windows7-32"/TLBID:記号[email protected]を調べる1

+0

リンカの出力を投稿することはできますか? –

+1

あなたが使用しようとしているライブラリのタグを追加したいかもしれませんが、 'iViewNG-Core.h'が何であるかわかりません。さらにsidenode:C++コードでは、 'printf'の代わりに' #include '(またはそれを削除する)と' std :: cout << 'を使うべきです。 – user4407569

+1

*これはリンカの問題なので、どこが間違っていますか?* - ヘッダーファイルはリンカとは何の関係もないので、ヘッダーファイルは見ないでください - ヘッダーファイルはコンパイルプロセスでのみ使用されますあなたのモジュールは正常にコンパイルされました。呼び出し元の関数がどこにあるのかをリンカに指定する必要があります。おそらく外部ライブラリにあります。 – PaulMcKenzie

答えて

3

、それを破壊することができます

  • __imp_:2 chunkcsにこれは__declspec(dllimport)を意味します。
  • [email protected]:実際のシンボルで、C(またはextern "C"__stdcallシンボルでマングリングされています。パラメータの合計サイズは4バイトです。私は、この関数を含むDLLのLIBファイルがclのいずれかに渡されていることを確認することをお勧め

    extern "C" __declspec(dllimport) iViewRC __stdcall iView_GetLibraryVersion(iViewVersion*); 
    

    :これを考慮し、あなたのコードで行く、問題の原因関数がそうである

またはlink(前者の場合、clはそれをlinkに渡します)。

+0

私は次のコードを使用しました: #pragma comment(lib、 "libiViewNG-LibCore.lib") –

+0

@RakshitKothariこれはLIBファイルですか? ...私は本当にiViewに精通していない、真実を聞いた、私はちょうど私の自由な時間をMSVCの装飾シンボルをデマングルする方法を学ぶのに費やした。 –

関連する問題