2017-01-30 22 views
0

私は簡単なSGXプロジェクトを最初から作成しようとしています。だから私は、私はかなりLars Richter's blogからコピーしたことを、このメインホストアプリケーションのルーチンがあります。エラー読み込みエンクレーブ:CreateFile()でファイルを開くことができません

#define ENCLAVE_FILE _T("Enclave.signed.dll") 
#include <tchar.h> 
#include <cstdio> 
#include "sgx_urts.h" 
#include "Enclave_u.h" 

int main() 
{ 
    sgx_enclave_id_t eid; 
    sgx_status_t  ret = SGX_SUCCESS; 
    sgx_launch_token_t token = { 0 }; 
    int updated = 0; 

    ret = sgx_create_enclave(ENCLAVE_FILE, SGX_DEBUG_FLAG, &token, &updated, &eid, NULL); 

    if (ret != SGX_SUCCESS) { 
     printf("\nApp: error %#x, failed to create enclave.\n", ret); 
    } 


    scanf("\n"); 

    return 0; 
} 

をそれは罰金コンパイル(私は、Visual Studio 2015でインテルC++ 17.0コンパイラを使用しています)が、それはロードされません。エンクレーブ。ニールが指摘したように

[sgx_create_enclavew ..\urts\win\urts.cpp:195] Couldn't open file with CreateFile() 

App: error 0x200f, failed to create enclave. 
+1

Enclave.signed.dllはsgx_create_enclaveのどこかに存在しますか? –

+0

これはソリューションのデバッグフォルダにあります。 –

+0

sgx_create_enclave(それが何であれ)がそこにあると思いますか? –

答えて

1

ゴー。 のデバッグ作業ディレクトリから$(SolutionDir)Debugを変更します。この回答は、プロジェクトとapp_test_saveの両方がenclave_test_saveのソリューションに属していることを前提としています。

0

は、sgx_create_enclaveプログラムは、Visual Studioのデバッガ内から実行されていたDLLを見つけることができませんでした:私は、次のエラーメッセージが表示されます。実行ファイルを "Debug"フォルダで直接実行したときにうまくいきました。

だから、両方の設定で動作させるための簡単なトリックは、次の操作を行うことです:app_test_saveプロジェクトの設定に

#define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll") 
+0

この解決策は、DLLが常に作業ディレクトリに対して相対的であると仮定しているため、他の場所で問題が発生します。例えば、プログラムはC:のルートから 'c:\ Users \ user \ program'として実行することができ、dllは存在しないディレクトリである' c:\ .. \ Debug'で検索されます。 – user4581301

+0

この時点で私は生産上の問題には関心がありません。 –

+0

理解できますが、これらの回答は他の人によって読まれることを意図しており、他の人は、この解決策がそのケースでは使用できない可能性が高いことに気づく必要があります。 – user4581301

関連する問題