list_dir.cpp

本文介绍了一个基于Windows的应用程序编程实例,包括窗口类注册、消息处理、对话框创建等关键步骤,并针对不同版本的Windows进行了适配。

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> 
#include <windows.h> 
#include "List_Dir.h"


#if defined (WIN32)
 #define IS_WIN32 TRUE
#else
 #define IS_WIN32 FALSE
#endif

#define IS_NT      IS_WIN32 && (BOOL)(GetVersion() < 0x80000000)
#define IS_WIN32S  IS_WIN32 && (BOOL)(!(IS_NT) && (LOBYTE(LOWORD(GetVersion()))<4))
#define IS_WIN95   (BOOL)(!(IS_NT) && !(IS_WIN32S)) && IS_WIN32

HINSTANCE hInst;   // current instance

LPCTSTR lpszAppName  = "MyApp";
LPCTSTR lpszTitle    = "My Application";

BOOL RegisterWin95( CONST WNDCLASS* lpwc );

int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                      LPTSTR lpCmdLine, int nCmdShow)
{
   MSG      msg;
   HWND     hWnd;
   WNDCLASS wc;

   // Register the main application window class.
   //............................................
   wc.style         = CS_HREDRAW | CS_VREDRAW;
   wc.lpfnWndProc   = (WNDPROC)WndProc;      
   wc.cbClsExtra    = 0;                     
   wc.cbWndExtra    = 0;                     
   wc.hInstance     = hInstance;             
   wc.hIcon         = LoadIcon( hInstance, lpszAppName );
   wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
   wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
   wc.lpszMenuName  = lpszAppName;             
   wc.lpszClassName = lpszAppName;             

   if ( IS_WIN95 )
   {
      if ( !RegisterWin95( &wc ) )
         return( FALSE );
   }
   else if ( !RegisterClass( &wc ) )
      return( FALSE );

   hInst = hInstance;

   // Create the main application window.
   //....................................
   hWnd = CreateWindow( lpszAppName,
                        lpszTitle,   
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT, 0,
                        CW_USEDEFAULT, 0, 
                        NULL,             
                        NULL,             
                        hInstance,        
                        NULL              
                      );

   if ( !hWnd )
      return( FALSE );

   ShowWindow( hWnd, nCmdShow );
   UpdateWindow( hWnd );        

   while( GetMessage( &msg, NULL, 0, 0) )  
   {
      TranslateMessage( &msg );
      DispatchMessage( &msg ); 
   }

   return( msg.wParam );
}


BOOL RegisterWin95( CONST WNDCLASS* lpwc )
{
   WNDCLASSEX wcex;

   wcex.style         = lpwc->style;
   wcex.lpfnWndProc   = lpwc->lpfnWndProc;
   wcex.cbClsExtra    = lpwc->cbClsExtra;
   wcex.cbWndExtra    = lpwc->cbWndExtra;
   wcex.hInstance     = lpwc->hInstance;
   wcex.hIcon         = lpwc->hIcon;
   wcex.hCursor       = lpwc->hCursor;
   wcex.hbrBackground = lpwc->hbrBackground;
   wcex.lpszMenuName  = lpwc->lpszMenuName;
   wcex.lpszClassName = lpwc->lpszClassName;

   // Added elements for Windows 95.
   //...............................
   wcex.cbSize = sizeof(WNDCLASSEX);
   wcex.hIconSm = LoadImage(wcex.hInstance, lpwc->lpszClassName,
                            IMAGE_ICON, 16, 16,
                            LR_DEFAULTCOLOR );
   
   return RegisterClassEx( &wcex );
}

LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
   switch( uMsg )
   {
      case WM_COMMAND :
              switch( LOWORD( wParam ) )
              {
                 case IDM_TEST :
                        DialogBox( hInst, "TestDialog", hWnd,
                                   (DLGPROC)TestDlgProc );
                        break;

                 case IDM_ABOUT :
                        DialogBox( hInst, "AboutBox", hWnd, (DLGPROC)About );
                        break;

                 case IDM_EXIT :
                        DestroyWindow( hWnd );
                        break;
              }
              break;
     
      case WM_DESTROY :
              PostQuitMessage(0);
              break;

      default :
            return( DefWindowProc( hWnd, uMsg, wParam, lParam ) );
   }

   return( 0L );
}

LRESULT CALLBACK TestDlgProc( HWND hDlg, UINT uMsg,
                              WPARAM wParam, LPARAM lParam )
{
static char szTmp[255];

   switch( uMsg )
   {
      case WM_INITDIALOG :
            DlgDirList( hDlg, "*.*", IDC_LIST, IDC_DIRECTORY,
                        DDL_DIRECTORY | DDL_DRIVES );
            break;

      case WM_COMMAND :
            switch( LOWORD( wParam ) )
            {
               case IDC_LIST :
                      if ( HIWORD( wParam ) == LBN_DBLCLK )
                      {
                         if ( DlgDirSelectEx( hDlg, szTmp, sizeof( szTmp ),
                                              IDC_LIST ) )
                         {
                            strcat( szTmp, "*.*" );
                            DlgDirList( hDlg, szTmp, IDC_LIST, IDC_DIRECTORY,
                                        DDL_DIRECTORY | DDL_DRIVES );
                         }
                         else
                            MessageBox( hDlg, szTmp, "File Selected",
                                        MB_OK | MB_ICONINFORMATION );
                      }
                      break;

               case IDCANCEL:
                      EndDialog( hDlg, IDCANCEL );
                      break;
            }
            break;

      default :
            return( FALSE );
   }

   return( TRUE );
}


LRESULT CALLBACK About( HWND hDlg,          
                        UINT message,       
                        WPARAM wParam,      
                        LPARAM lParam)
{
   switch (message)
   {
       case WM_INITDIALOG:
               return (TRUE);

       case WM_COMMAND:                             
               if (   LOWORD(wParam) == IDOK        
                   || LOWORD(wParam) == IDCANCEL)   
               {
                       EndDialog(hDlg, TRUE);       
                       return (TRUE);
               }
               break;
   }

   return (FALSE);
}

aux_source_directory (. SRC_LIST) include_directories(../include E:/xiongan/code/windows_ivw_e867a88f2_cnenesr_e75f07b62_xtts_e2e44feff_2.2.15_rc6/include) set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) link_directories(E:/xiongan/code/windows_ivw_e867a88f2_cnenesr_e75f07b62_xtts_e2e44feff_2.2.15_rc6/libs/64) add_executable (main ${SRC_LIST}) target_link_libraries( main winmm # 系统库放最前 eabb2f029_v10092_aee # 先链接子模块库 ebd1bade4_v1031_aee ef7d69542_v1014_aee AEE_lib # 基础库放最后(假设其他库依赖它) ) PS E:\xiongan\code\windows_ivw_e867a88f2_cnenesr_e75f07b62_xtts_e2e44feff_2.2.15_rc6\build> mingw32-make [ 12%] Building CXX object samples/aikit_sample/CMakeFiles/main.dir/aikit_test.cpp.obj [ 25%] Building CXX object samples/aikit_sample/CMakeFiles/main.dir/cnenesr_sample.cpp.obj [ 37%] Building CXX object samples/aikit_sample/CMakeFiles/main.dir/cnenivw_sample.cpp.obj In file included from E:\xiongan\code\windows_ivw_e867a88f2_cnenesr_e75f07b62_xtts_e2e44feff_2.2.15_rc6\samples\aikit_sample\cnenivw_sample.cpp:2: E:/xiongan/code/windows_ivw_e867a88f2_cnenesr_e75f07b62_xtts_e2e44feff_2.2.15_rc6/include/sample_common.h:42:12: warning: 'int ivw_file(AIKIT::AIKIT_ParamBuilder*, const char*, const char*)' used but never defined static int ivw_file(AIKIT_ParamBuilder* paramBuilder, const char* ability_id, const char* test_audio); ^~~~~~~~ E:/xiongan/code/windows_ivw_e867a88f2_cnenesr_e75f07b62_xtts_e2e44feff_2.2.15_rc6/include/sample_common.h:40:12: warning: 'int ivw_microphone(AIKIT::AIKIT_ParamBuilder*, const char*, int)' used but never defined static int ivw_microphone(AIKIT_ParamBuilder* paramBuilder, const char* ability_id, int specifyData_count); ^~~~~~~~~~~~~~ [ 50%] Building CXX object samples/aikit_sample/CMakeFiles/main.dir/ivw70_sample.cpp.obj [ 62%] Building CXX object samples/aikit_sample/CMakeFiles/main.dir/speech_recognizer.cpp.obj [ 75%] Building C object samples/aikit_sample/CMakeFiles/main.dir/winrec.c.obj [ 87%] Building CXX object samples/aikit_sample/CMakeFiles/main.dir/xtts10_sample.cpp.obj [100%] Linking CXX executable E:\xiongan\code\windows_ivw_e867a88f2_cnenesr_e75f07b62_xtts_e2e44feff_2.2.15_rc6\bin\main.exe CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x1fe): undefined reference to `AIKIT::AIKIT_Configurator::builder()' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x206): undefined reference to `AIKIT::ConfigBuilder::app()' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x215): undefined reference to `AIKIT::AppBuilder::appID(char const*)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x224): undefined reference to `AIKIT::AppBuilder::apiSecret(char const*)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x233): undefined reference to `AIKIT::AppBuilder::apiKey(char const*)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x242): undefined reference to `AIKIT::AppBuilder::workDir(char const*)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x251): undefined reference to `AIKIT::AppBuilder::resDir(char const*)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x259): undefined reference to `AIKIT::ConfigBuilder::auth()' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x266): undefined reference to `AIKIT::AuthBuilder::authType(int)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x275): undefined reference to `AIKIT::AuthBuilder::ability(char const*)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x27d): undefined reference to `AIKIT::ConfigBuilder::log()' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x28a): undefined reference to `AIKIT::LogBuilder::logLevel(int)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x297): undefined reference to `AIKIT::LogBuilder::logMode(int)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x2a6): undefined reference to `AIKIT::LogBuilder::logPath(char const*)' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x2ab): undefined reference to `AIKIT::AIKIT_Init()' CMakeFiles\main.dir/objects.a(aikit_test.cpp.obj):aikit_test.cpp:(.text+0x341): undefined reference to `AIKIT::AIKIT_UnInit()' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x46e): undefined reference to `AIKIT::AIKIT_SpecifyDataSet(char const*, char const*, int*, int)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x4a2): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_ParamBuilder*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x4c4): undefined reference to `AIKIT::AIKIT_Start(char const*, _AIKIT_BaseParam*, void*, AIKIT_HANDLE**)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x572): undefined reference to `AIKIT::AIKIT_DataBuilder::create()' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x620): undefined reference to `AIKIT::AiAudio::get(char const*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x706): undefined reference to `AIKIT::AiAudio::get(char const*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x79c): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x7dd): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x8da): undefined reference to `AIKIT::AIKIT_RegisterAbilityCallback(char const*, AIKIT_Callbacks)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x8f7): undefined reference to `AIKIT::AIKIT_ParamBuilder::create()' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x986): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_ParamBuilder*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x998): undefined reference to `AIKIT::AIKIT_EngineInit(char const*, _AIKIT_BaseParam*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0x9bc): undefined reference to `AIKIT::AIKIT_CustomBuilder::create()' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0xa0b): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_CustomBuilder*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0xa1a): undefined reference to `AIKIT::AIKIT_LoadData(char const*, _AIKIT_CustomData*)' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0xa86): undefined reference to `AIKIT::AIKIT_ParamBuilder::create()' CMakeFiles\main.dir/objects.a(cnenesr_sample.cpp.obj):cnenesr_sample.cpp:(.text+0xcc5): undefined reference to `AIKIT::AIKIT_UnLoadData(char const*, char const*, int)' CMakeFiles\main.dir/objects.a(cnenivw_sample.cpp.obj):cnenivw_sample.cpp:(.text+0x111): undefined reference to `AIKIT::AIKIT_RegisterAbilityCallback(char const*, AIKIT_Callbacks)' CMakeFiles\main.dir/objects.a(cnenivw_sample.cpp.obj):cnenivw_sample.cpp:(.text+0x125): undefined reference to `AIKIT::AIKIT_EngineInit(char const*, _AIKIT_BaseParam*)' CMakeFiles\main.dir/objects.a(cnenivw_sample.cpp.obj):cnenivw_sample.cpp:(.text+0x149): undefined reference to `AIKIT::AIKIT_ParamBuilder::create()' CMakeFiles\main.dir/objects.a(cnenivw_sample.cpp.obj):cnenivw_sample.cpp:(.text+0x1b1): undefined reference to `AIKIT::AIKIT_LoadData(char const*, _AIKIT_CustomData*)' CMakeFiles\main.dir/objects.a(cnenivw_sample.cpp.obj):cnenivw_sample.cpp:(.text+0x28b): undefined reference to `ivw_microphone(AIKIT::AIKIT_ParamBuilder*, char const*, int)' CMakeFiles\main.dir/objects.a(cnenivw_sample.cpp.obj):cnenivw_sample.cpp:(.text+0x2b9): undefined reference to `ivw_file(AIKIT::AIKIT_ParamBuilder*, char const*, char const*)' CMakeFiles\main.dir/objects.a(cnenivw_sample.cpp.obj):cnenivw_sample.cpp:(.text+0x308): undefined reference to `AIKIT::AIKIT_UnLoadData(char const*, char const*, int)' CMakeFiles\main.dir/objects.a(cnenivw_sample.cpp.obj):cnenivw_sample.cpp:(.text+0x317): undefined reference to `AIKIT::AIKIT_EngineUnInit(char const*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x1c8): undefined reference to `AIKIT::AIKIT_SpecifyDataSet(char const*, char const*, int*, int)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x1ff): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_ParamBuilder*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x21e): undefined reference to `AIKIT::AIKIT_Start(char const*, _AIKIT_BaseParam*, void*, AIKIT_HANDLE**)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x2f7): undefined reference to `AIKIT::AIKIT_DataBuilder::create()' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x37a): undefined reference to `AIKIT::AiAudio::get(char const*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x3d4): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_DataBuilder*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x3e3): undefined reference to `AIKIT::AIKIT_Write(AIKIT_HANDLE*, _AIKIT_BaseData*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x427): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x562): undefined reference to `AIKIT::AIKIT_SpecifyDataSet(char const*, char const*, int*, int)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x595): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_ParamBuilder*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x5ba): undefined reference to `AIKIT::AIKIT_Start(char const*, _AIKIT_BaseParam*, void*, AIKIT_HANDLE**)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x667): undefined reference to `AIKIT::AIKIT_DataBuilder::create()' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x6cd): undefined reference to `AIKIT::AiAudio::get(char const*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x733): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_DataBuilder*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x745): undefined reference to `AIKIT::AIKIT_Write(AIKIT_HANDLE*, _AIKIT_BaseData*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x78a): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x7b1): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x89a): undefined reference to `AIKIT::AIKIT_RegisterAbilityCallback(char const*, AIKIT_Callbacks)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x89f): undefined reference to `AIKIT::AIKIT_ParamBuilder::create()' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0x9d7): undefined reference to `AIKIT::AIKIT_EngineInit(char const*, _AIKIT_BaseParam*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0xa55): undefined reference to `AIKIT::AIKIT_LoadData(char const*, _AIKIT_CustomData*)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0xaad): undefined reference to `AIKIT::AIKIT_UnLoadData(char const*, char const*, int)' CMakeFiles\main.dir/objects.a(ivw70_sample.cpp.obj):ivw70_sample.cpp:(.text+0xabc): undefined reference to `AIKIT::AIKIT_EngineUnInit(char const*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x27): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_DataBuilder*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x3b): undefined reference to `AIKIT::AIKIT_Write(AIKIT_HANDLE*, _AIKIT_BaseData*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x6d): undefined reference to `AIKIT::AIKIT_Read(AIKIT_HANDLE*, _AIKIT_BaseDataList**)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x244): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x3a8): undefined reference to `AIKIT::AIKIT_DataBuilder::create()' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x3b8): undefined reference to `AIKIT::AIKIT_ParamBuilder::create()' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x674): undefined reference to `AIKIT::AIKIT_SpecifyDataSet(char const*, char const*, int*, int)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x69d): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_ParamBuilder*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x6b9): undefined reference to `AIKIT::AIKIT_Start(char const*, _AIKIT_BaseParam*, void*, AIKIT_HANDLE**)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x705): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x83e): undefined reference to `AIKIT::AiAudio::get(char const*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x8e4): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x8f9): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' CMakeFiles\main.dir/objects.a(speech_recognizer.cpp.obj):speech_recognizer.cpp:(.text+0x988): undefined reference to `AIKIT::AiAudio::get(char const*)' CMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x141): undefined reference to `AIKIT::AIKIT_RegisterAbilityCallback(char const*, AIKIT_Callbacks)' CMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x146): undefined reference to `AIKIT::AIKIT_ParamBuilder::create()' CMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x285): undefined reference to `AIKIT::AIKIT_Builder::build(AIKIT::AIKIT_ParamBuilder*)' CMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x2a7): undefined reference to `AIKIT::AIKIT_Start(char const*, _AIKIT_BaseParam*, void*, AIKIT_HANDLE**)' CMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x2ca): undefined reference to `AIKIT::AIKIT_DataBuilder::create()' CMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x2f3): undefined reference to `AIKIT::AiText::get(char const*)' CMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x3ae): undefineCMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.texCMCMakeFCMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x3bd): undefined reference to `AIKIT::AIKIT_Write(AIKIT_HANDLE*, _AIKIT_BaseData*)' CMakeFiles\main.dir/objects.a(xtts10_sample.cpp.obj):xtts10_sample.cpp:(.text+0x41a): undefined reference to `AIKIT::AIKIT_End(AIKIT_HANDLE*)' collect2.exe: error: ld returned 1 exit status mingw32-make[2]: *** [samples\aikit_sample\CMakeFiles\main.dir\build.make:204: E:/xiongan/code/windows_ivw_e867a88f2_cnenesr_e75f07b62_xtts_e2e44feff_2.2.15_rc6/bin/main.exe] Error 1 mingw32-make[1]: *** [CMakeFiles\Makefile2:105: samples/aikit_sample/CMakeFiles/main.dir/all] Error 2 mingw32-make: *** [Makefile:90: all] Error 2
最新发布
10-18
FAILED: lib/libInspireFace.so cmd.exe /C "cd . && D:\android\Android\Sdk\ndk\25.2.9519653\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android21 --sysroot=D:/android/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -g0 -std=c++14 -O3 -O3 -mfpu=neon -O3 -DNDEBUG -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -Wl,--gc-sections -shared -Wl,-soname,libInspireFace.so -o lib\libInspireFace.so @CMakeFiles\InspireFace.rsp && cd ." ld: error: undefined symbol: HFLaunchInspireFace >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_GlobalLaunch) ld: error: undefined symbol: HFTerminateInspireFace >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_GlobalTerminate) ld: error: undefined symbol: HFQueryInspireFaceLaunchStatus >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_QueryLaunchStatus) ld: error: undefined symbol: HFCreateInspireFaceSession >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_CreateSession) ld: error: undefined symbol: HFReleaseInspireFaceSession >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_ReleaseSession) ld: error: undefined symbol: HFCreateImageStream >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_CreateImageStreamFromBitmap) >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_CreateImageStreamFromByteBuffer) ld: error: undefined symbol: HFDeBugImageStreamDecodeSave >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_WriteImageStreamToFile) ld: error: undefined symbol: HFReleaseImageStream >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_ReleaseImageStream) ld: error: undefined symbol: HFExecuteFaceTrack >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_ExecuteFaceTrack) ld: error: undefined symbol: HFGetNumOfFaceDenseLandmark >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_GetFaceDenseLandmarkFromFaceToken) ld: error: undefined symbol: HFGetFaceDenseLandmarkFromFaceToken >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_GetFaceDenseLandmarkFromFaceToken) ld: error: undefined symbol: HFFaceFeatureExtract >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_ExtractFaceFeature) ld: error: undefined symbol: HFFaceGetFaceAlignmentImage >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_GetFaceAlignmentImage) ld: error: undefined symbol: HFImageBitmapGetData >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_GetFaceAlignmentImage) ld: error: undefined symbol: HFReleaseImageBitmap >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_GetFaceAlignmentImage) >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_GetFaceAlignmentImage) ld: error: undefined symbol: HFSessionSetTrackPreviewSize >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_SetTrackPreviewSize) ld: error: undefined symbol: HFSessionSetFilterMinimumFacePixelSize >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_SetFilterMinimumFacePixelSize) ld: error: undefined symbol: HFSessionSetFaceDetectThreshold >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_SetFaceDetectThreshold) ld: error: undefined symbol: HFSessionSetTrackModeSmoothRatio >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_SetTrackModeSmoothRatio) ld: error: undefined symbol: HFSessionSetTrackModeNumSmoothCacheFrame >>> referenced by inspireface_jni.cpp >>> cpp/inspireface/CMakeFiles/InspireFace.dir/platform/jni/android/inspireface_jni.cpp.o:(Java_com_insightface_sdk_inspireface_InspireFace_SetTrackModeNumSmoothCacheFrame) ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors) clang++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed. Build-AndroidArch : Ninja 编译失败! 所在位置 D:\insightface-master\insightface-master\cpp-package\inspireface\command\build_android.ps1:247 字符: 1 + Build-AndroidArch "arm64-v8a" 21 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Build-AndroidArch
08-10
以下是完善后的 **CMake 构建系统**,将 `volcano_gpio_app.cpp` 和 `volcano_gpio_port.cpp` 分别放在 `app` 和 `port` 目录,并正确配置依赖关系和安装路径。 --- ### **1. 项目目录结构** ``` project_root/ ├── CMakeLists.txt # 根 CMakeLists ├── src/ │ ├── app/ # 应用层代码 │ │ └── volcano_gpio_app.cpp │ ├── ports/ # 端口实现 │ │ └── volcano_gpio/ │ │ ├── volcano_gpio_port.cpp │ │ └── volcano_gpio_port.hpp │ └── fmk/ # 框架代码(如日志) │ └── volcano_log.cpp └── build/ # 构建目录 ``` --- ### **2. 根目录 `CMakeLists.txt`** ```cmake cmake_minimum_required(VERSION 3.10) project(volcano_gpio_project VERSION 1.0.0 LANGUAGES CXX) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 添加子目录 add_subdirectory(src/ports/volcano_gpio) add_subdirectory(src/app) # 全局安装路径(可选) set(CMAKE_INSTALL_PREFIX "/usr/local") ``` --- ### **3. `src/ports/volcano_gpio/CMakeLists.txt`** ```cmake # 定义端口库 include_directories(${CMAKE_CURRENT_SOURCE_DIR}) add_library(volcano_gpio_port SHARED volcano_gpio_port.cpp ${CMAKE_SOURCE_DIR}/src/fmk/volcano_log.cpp # 依赖日志模块 ) set_target_properties(volcano_gpio_port PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 1 ) # 链接动态库依赖(如 dl) target_link_libraries(volcano_gpio_port PRIVATE dl) # 安装目标 install(TARGETS volcano_gpio_port LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # 动态库安装到 lib/ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/volcano_gpio # 头文件(可选) ) # 导出头文件(如果需要) set_target_properties(volcano_gpio_port PROPERTIES PUBLIC_HEADER "volcano_gpio_port.hpp" ) ``` --- ### **4. `src/app/CMakeLists.txt`** ```cmake # 定义应用库(或可执行文件) add_library(volcano_gpio_app SHARED ${CMAKE_CURRENT_SOURCE_DIR}/volcano_gpio_app.cpp ) # 链接端口库和其他依赖 target_link_libraries(volcano_gpio_app PRIVATE volcano_gpio_port # 依赖端口实现 pthread Boost::filesystem # 示例依赖 ) set_target_properties(volcano_gpio_app PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 1 ) # 安装目标 install(TARGETS volcano_gpio_app LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) # 如果需要将 app 链接到主程序(如 meig_volcano) target_sources(meig_volcano PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/volcano_gpio_agent.cpp # 假设存在代理层 ) ``` --- ### **5. 代码文件调整** #### **(1) `volcano_gpio_port.hpp`(头文件)** ```cpp #ifndef VOLCANO_GPIO_PORT_HPP #define VOLCANO_GPIO_PORT_HPP #include <memory> #include <iostream> // 动态库导出宏(Windows/Linux 兼容) #if defined(_WIN32) #ifdef VOLCANO_EXPORTS #define VOLCANO_API __declspec(dllexport) #else #define VOLCANO_API __declspec(dllimport) #endif #else #define VOLCANO_API __attribute__((visibility("default"))) #endif enum ENUM_PINNAME { PIN_LED, PIN_BUTTON }; namespace volcano { namespace port { namespace gpio { class VOLCANO_API Iface { // 使用 VOLCANO_API 导出符号 public: virtual ~Iface() = default; static std::shared_ptr<Iface> getInstance(); virtual int mg_volcano_ms_gpio_base_init(ENUM_PINNAME pin_name) = 0; protected: Iface() = default; }; } // namespace gpio } // namespace port } // namespace volcano #endif // VOLCANO_GPIO_PORT_HPP ``` #### **(2) `volcano_gpio_app.cpp`(主程序)** ```cpp #include "volcano_gpio_port.hpp" int main() { auto gpio = volcano::port::gpio::Iface::getInstance(); if (!gpio) { std::cerr << "Failed to create GPIO instance!" << std::endl; return -1; } int ret = gpio->mg_volcano_ms_gpio_base_init(PIN_LED); if (ret != 0) { std::cerr << "GPIO init failed!" << std::endl; return ret; } std::cout << "GPIO initialized." << std::endl; return 0; } ``` --- ### **6. 构建与安装** #### **构建命令** ```bash mkdir -p build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/custom/install/path # 可选自定义安装路径 make -j$(nproc) sudo make install # 需要 root 权限安装到系统目录 ``` #### **安装结果** - 动态库:`/usr/local/lib/libvolcano_gpio_port.so` 和 `libvolcano_gpio_app.so` - 头文件(可选):`/usr/local/include/volcano_gpio/volcano_gpio_port.hpp` --- ### **7. 关键改进点** 1. **动态库导出符号** - 使用 `VOLCANO_API` 宏确保跨平台符号可见性。 2. **依赖管理** - `volcano_gpio_app` 显式依赖 `volcano_gpio_port`,避免链接错误。 3. **模块化设计** - 端口实现(`port`)和应用逻辑(`app`)分离,便于替换硬件驱动。 4. **安装配置** - 支持自定义安装路径,符合 Linux 包管理规范。 --- ### **8. 常见问题解决** #### **Q1: 链接时提示 `undefined reference`** - 确保 `target_link_libraries` 中包含了所有依赖库(如 `volcano_gpio_port`)。 - 检查动态库的 `SONAME` 是否正确(通过 `readelf -d libvolcano_gpio_port.so`)。 #### **Q2: 如何调试 CMake 构建过程?** - 使用 `cmake --debug-output` 或 `make VERBOSE=1` 查看详细编译命令。 #### **Q3: 如何静态链接某些库?** - 修改 `add_library` 的 `SHARED` 为 `STATIC`,或使用 `set_target_properties` 覆盖类型。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值