Trang 2 trên tổng số 2 Đầu tiênĐầu tiên 12
Từ 11 tới 19 trên tổng số 19 kết quả

Đề tài: Biên dịch source code c/c++ bằng Command Line

  1. #11
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Mặc định Biên dịch source code c/c++ bằng Command Line

    Cũng như c, pascal là một họ ngôn ngữ, là sp của nhiều tổ chức, tập đoàn khác nhau và dùng cho các HDH khác nhau.

    Trong delphi có chỉ thị (directive) để định hướng : cdecl, stdcall, safecall OR pascal, register
    - pascal, register là left2right
    - cdecl, stdcall, safecall làm ngược lại right2left

    Phọt mô xa 2016

  2. #12
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Sử dụng cl, link hay nMake cho Vc++ nó cũng khó khăn với nhiều lập trình nước (LTV - programmer) ta.

    Khi làm việc với IDE (Integrated Development Environment - môi trường tích hợp viết/dịch/thử code) nó sẽ sinh ra các file abc.sln, abK.xyProj.

    Dùng msBuild.exe như đã đề cập mở file solution / project sẽ dịch dễ dàng hơn, nhanh hơn : không nhất thiết phải mở lại IDE.

    Phọt mô xa 2016

  3. #13
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Như trên, thay vì mở vs IDE để biên dịch, tôi cấu hình regedit / registry cho phép mở abK.vcproj từ WE
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		_MsBuild.jpg
Lần xem:	2
Size:		38.5 KB
ID:		50938

    Phọt mô xa 2016

  4. #14
    Ngày gia nhập
    08 2017
    Bài viết
    3,817

    Log file thật sinh ra khi biên dịch mã nguồn TTSApp (c++)

    HTML Code:
    1. <pre>
    2. <h1>Build Log</h1>
    3. <h3>
    4. --------------------Configuration: TTSApp - Win32 Debug--------------------
    5. </h3>
    6. <h3>Command Lines</h3>
    7. Creating command line "rc.exe /l 0x409 /fo"Debug/ttsapp.res" /i "E:\program files\Microsoft Speech SDK 5.1\Include" /d "_DEBUG" "F:\_Works\Yr2018\_TTS\TTSApp10\ttsapp.rc""
    8. Creating temporary file "C:\Users\Hien\AppData\Local\Temp\RSP1CA9.tmp" with contents
    9. [
    10. /nologo /MLd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\..\..\..\sdk\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D _WIN32_WINNT=0x0500 /FR"Debug/" /Fp"Debug/ttsapp.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
    11. "F:\_Works\Yr2018\_TTS\TTSApp10\childwin.cpp"
    12. "F:\_Works\Yr2018\_TTS\TTSApp10\dlgmain.cpp"
    13. "F:\_Works\Yr2018\_TTS\TTSApp10\globals.cpp"
    14. "F:\_Works\Yr2018\_TTS\TTSApp10\winmain.cpp"
    15. ]
    16. Creating command line "cl.exe @C:\Users\Hien\AppData\Local\Temp\RSP1CA9.tmp"
    17. Creating temporary file "C:\Users\Hien\AppData\Local\Temp\RSP1CAA.tmp" with contents
    18. [
    19. comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ttsapp.pdb" /debug /machine:I386 /out:"Debug/ttsapp.exe" /pdbtype:sept /libpath:"..\..\..\lib\i386" /libpath:"..\..\..\..\..\sdk\lib\i386"
    20. .\Debug\childwin.obj
    21. .\Debug\dlgmain.obj
    22. .\Debug\globals.obj
    23. .\Debug\winmain.obj
    24. .\Debug\ttsapp.res
    25. ]
    26. Creating command line "link.exe @C:\Users\Hien\AppData\Local\Temp\RSP1CAA.tmp"
    27. <h3>Output Window</h3>
    28. Compiling resources...
    29. Compiling...
    30. childwin.cpp
    31. dlgmain.cpp
    32. globals.cpp
    33. winmain.cpp
    34. Linking...
    35.  
    36. <h3>Results</h3>
    37. ttsapp.exe - 0 error(s), 0 warning(s)
    38. </pre>
    39. </body>
    40. </html>

    dựa vào nó có thể viết batch script để biên dịch.

    Thích thì xem (#10) thêm ở:
    http://diendan.congdongcviet.com/threads/t385343::so-sanh-mot-so-ide.cpp

  5. #15
    Ngày gia nhập
    08 2017
    Bài viết
    3,817

    c/c++ là trình biên dịch nhiều pha.
    Nó có thể sinh ra những file đích khác nhau, ví dụ
    Code:
                                  -PREPROCESSOR-
     
    /AI<dir> add to assembly search path    /FU<file> forced using assembly/module
    /C don't strip comments                 /D<name>{=|#}<text> define macro
    /E preprocess to stdout                 /EP preprocess to stdout, no #line
    /P preprocess to file                   /Fx merge injected code to file
    /FI<file> name forced include file      /U<name> remove predefined macro
    /u remove all predefined macros         /I<dir> add to include search path
    /X ignore "standard places"
    ...

  6. #16
    Ngày gia nhập
    08 2017
    Bài viết
    3,817

    Mặc định Biên dịch source code c/c++ bằng Command Line

    Ví dụ cho #15 ở trên
    C++ Code:
    1. //#include <iostream>
    2. using namespace std;
    3.  
    4. //Byte order mark UTF-8 / UTF-16 LE
    5. //#define ARR char ar[] = "\xFF\xFE"
    6.  
    7. #define ARR char ar[] = "\xEF\xBB\xBF"
    8.  
    9. ARR;
    10. void Scop(){
    11.     ARR;
    12.     cout << "\n\n + in Scop: " << ar;
    13. }
    14.  
    15. void Call(){
    16.     ARR;
    17.     cout << "\n\n + in Call: " << ar;
    18. }
    19.  
    20. int main(){
    21.     cout << "=== Tiếng Việt cho i tờ, Start ===";
    22.     // biến đặt ở toàn cục
    23.     Scop();
    24.     // biến khai báo trong hàm con
    25.     Call();
    26.     // biến khai báo trong hàm chính
    27.     ARR;
    28.     cout << "\n\n + in main: " << ar;
    29.     //
    30.     cout << "\n\n=== Tiếng Việt cho i tờ, Ended ===\n";
    31. }
    Commen dòng #1, để tránh nó chèn làm rối - diễn tả ở đây.
    Biên dịch:
    cl /nologo /C /EP /P var3.cpp /Fi"pVar3.c"

    Kết quả:
    C++ Code:
    1.  
    2. //#include <iostream>
    3. using namespace std;
    4.  
    5. //Byte order mark UTF-8 / UTF-16 LE
    6. //#define ARR char ar[] = "\xFF\xFE"
    7.  
    8.  
    9.  
    10. char ar[] = "\xEF\xBB\xBF";
    11. void Scop(){
    12.     char ar[] = "\xEF\xBB\xBF";
    13.     cout << "\n\n + in Scop: " << ar;
    14. }
    15.  
    16. void Call(){
    17.     char ar[] = "\xEF\xBB\xBF";
    18.     cout << "\n\n + in Call: " << ar;
    19. }
    20.  
    21. int main(){
    22.     cout << "=== Ti?ng Vi?t cho i t?, Start ===";
    23.     // biến đặt ở toàn cục
    24.     Scop();
    25.     // biến khai báo trong hàm con
    26.     Call();
    27.     // biến khai báo trong hàm chính
    28.     char ar[] = "\xEF\xBB\xBF";
    29.     cout << "\n\n + in main: " << ar;
    30.     //
    31.     cout << "\n\n=== Ti?ng Vi?t cho i t?, Ended ===\n";
    32. }

  7. #17
    Ngày gia nhập
    08 2017
    Bài viết
    3,817

    Biên dịch cho kích thước nhỏ ( /MD ) chưa hẳn là tốt
    Code:
                                    -LINKING-
     
    /LD Create .DLL                         /LDd Create .DLL debug library
    /LN Create a .netmodule                 /F<num> set stack size
    /link [linker options and libraries]    /MD link with MSVCRT.LIB
    /MT link with LIBCMT.LIB                /MDd link with MSVCRTD.LIB debug lib
    /MTd link with LIBCMTD.LIB debug lib
    khi chạy trên máy khác, hệ điều hành khác, không có thư viện VcRuntime tương ứng, nó không chạy vì/do thiếu thư viện.
    ...
    ..
    .

  8. #18
    Ngày gia nhập
    08 2017
    Bài viết
    3,817

    Liên quan tới bài viết cũ trên diễn đàn, Google Translate, #26
    http://diendan.congdongcviet.com/threads/t7362::lap-trinh-mang-thu-vien-winsock-tren-visual-cpp.cpp/page3/

    C++ Code:
    1. #include <stdio.h>
    2. #include <tchar.h>
    3. #include <iostream>
    4. #include <vector>
    5. #include <winsock2.h>
    6.  
    7. #pragma comment (lib,"ws2_32.lib")
    8.  
    9. using namespace std;
    10.  
    11. #define WPORT 80
    12. #define WHOST "translate.google.com.vn"
    13.  
    14. bool Startup  (SOCKET& sock);
    15. bool Connect  (SOCKET& sock);
    16. void Shutdown (SOCKET& sock);
    17.  
    18. std::vector<std::string> Tokenize(const std::string & str, const std::string & delim);
    19.  
    20. bool Startup(SOCKET& sock)
    21. {
    22.     DWORD dwError = 0;
    23.  
    24.     WSADATA wsaData = {0};
    25.  
    26.     dwError = WSAStartup(MAKEWORD(2,2), &wsaData);
    27.  
    28.     if(dwError != ERROR_SUCCESS)   
    29.     {
    30.         printf("Startup winsock fail !...\n");
    31.         return 0;
    32.     }
    33.  
    34.     printf("Startup winsock successful !...\n");
    35.     sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    36.  
    37.     if (sock == INVALID_SOCKET)
    38.     {
    39.         printf("Start socket fail !...\n");
    40.         WSAGetLastError();
    41.         WSACleanup();
    42.         return 0;
    43.     }
    44.     printf("Start socket successful\n");
    45.     return 0;
    46. }
    47.  
    48. bool Connect (SOCKET& sock)
    49. {
    50.     DWORD       dwError     = 0;
    51.     hostent     *host       = 0;
    52.     sockaddr_in srvHost     = {0};
    53.  
    54.     host = gethostbyname(WHOST);
    55.     srvHost.sin_family      = AF_INET;
    56.     srvHost.sin_port        = htons(WPORT);
    57.     srvHost.sin_addr.s_addr = *((unsigned long*)host->h_addr);
    58.  
    59.     dwError = connect(sock, (struct sockaddr*)&srvHost, sizeof(srvHost));
    60.  
    61.     if(dwError)
    62.     {
    63.         dwError = WSAGetLastError();
    64.         printf("Connect to [%s:%d] fail !...\n",WHOST,WPORT);
    65.         return 0;
    66.     }
    67.     printf("Connect to [%s:%d] successful !...\n",WHOST,WPORT);
    68.     return 1;
    69. }
    70.  
    71. void Shutdown(SOCKET& sock)
    72. {
    73.     if(sock)
    74.     {
    75.         closesocket(sock);
    76.         printf("Close socket done !...\n");
    77.     }
    78.     WSACleanup();
    79.     printf("Clear winsock done !...\n");
    80. }
    81.  
    82. void main()
    83. {
    84.     SOCKET sock;
    85.     Startup(sock);
    86.     Connect(sock);
    87.  
    88.     string Line     = "";
    89.     string Link     = "GET /translate_a/t?client=t&text=Hello&sl=en&tl=vi&pc=0&oc=1 HTTP/1.1\r\n";
    90.     string Request  = "Host: translate.google.com.vn\r\n";
    91.     string UserAgent= "User-Agent: Translate Client\r\n\n";
    92.  
    93.     char szLine[200] = {0};
    94.  
    95.     do
    96.     {
    97.         printf("Translate: ");
    98.         scanf("%s",szLine);
    99.         Link  = "GET /translate_a/t?client=t&text=";
    100.         Link += szLine;
    101.         Link += "&sl=en&tl=vi&pc=0&oc=1 HTTP/1.1\r\n";
    102.  
    103.         send(sock,Link.data()       ,Link.length()      ,0);
    104.         send(sock,Request.data()    ,Request.length()   ,0);
    105.         send(sock,UserAgent.data()  ,UserAgent.length() ,0);
    106.  
    107.         bool done               = false;
    108.         int  EndHeader          = false;
    109.         int  iByteRevc          = 0;
    110.         char HTMLHeader         = 0;
    111.         char HTMLResponse[5120] = {0};
    112.  
    113.         while(!done)
    114.         {
    115.             iByteRevc = recv(sock,&HTMLHeader,1,0);
    116.  
    117.             if(iByteRevc < 0) done = true;
    118.  
    119.             switch(HTMLHeader)
    120.             {          
    121.                 case '\r':
    122.                     break;
    123.                 case '\n':
    124.                     if (EndHeader == true)
    125.                     {                      
    126.                         done = TRUE;
    127.                     }
    128.                     EndHeader=true;
    129.                     break;
    130.                 default:
    131.                     EndHeader=false;
    132.                     break;
    133.             }
    134.         }
    135.  
    136.         do
    137.         {
    138.             iByteRevc = recv(sock,HTMLResponse,sizeof(HTMLResponse)-1,0);
    139.             if (HTMLResponse[0] == 0)
    140.                 HTMLResponse[0] = ' ';
    141.             if(iByteRevc < 0)   break;
    142.             HTMLResponse[iByteRevc] = 0;
    143.         }
    144.         while(0);
    145.  
    146.         std::vector<std::string> Token;
    147.         Token = Tokenize(HTMLResponse,"[],\"");
    148.  
    149.         printf("--------------------------------------\n");
    150.         for(int i=1;i<Token.size()-1;i++)
    151.         {
    152.             printf("%s\n",Token[i].data());
    153.         }
    154.         printf("--------------------------------------\n");
    155.     }
    156.     while(strcmp(szLine,"exit") != 0);
    157.  
    158.     Shutdown(sock);
    159. }
    160.  
    161. std::vector<std::string> Tokenize(const std::string & str, const std::string & delim)
    162. {
    163.     using namespace std;
    164.     vector<string> tokens;
    165.     size_t p0 = 0, p1 = string::npos;
    166.     while(p0 != string::npos)
    167.     {
    168.         p1 = str.find_first_of(delim, p0);
    169.         if(p1 != p0)
    170.         {
    171.             string token = str.substr(p0, p1 - p0);
    172.             tokens.push_back(token);
    173.         }
    174.         p0 = str.find_first_not_of(delim, p1);
    175.     }
    176.     return tokens;
    177. }
    Nó viết và biên dịch trên version cũ, vc2003
    Code:
    Microsoft Visual Studio Solution File, Format Version 8.00
    ...
    Version="7.10"
    https://gist.github.com/DanAtkinson/3f863464a5dadd93b8e4dea6fe7b973a

    + Có thể convert sang phiên bản mới (2019, 2017, ...)
    + Một cách khác, đơn giản hơn, dịch nó bằng toolchain, cụ thể cl.exe:
    Cmd Code:
    1. cl.exe /nologo /EHsc Strmiids.lib wsock32.lib User32.lib Ole32.lib Gdi32.lib main.cpp
    ...
    ..
    .

  9. #19
    Ngày gia nhập
    08 2017
    Bài viết
    3,817

    Không liên quan gì đến trình biên dịch,
    + ở trên từ dòng 103 đến dòng 144 lần lượt send / recv lấy về từng byte, từng ký tự,
    + ta cũng có thể download luôn cho gọn
    URLDownloadToFileA / URLDownloadToFileW

    Code:
    HRESULT URLDownloadToFile(
                 LPUNKNOWN            pCaller,
                 LPCTSTR              szURL,
                 LPCTSTR              szFileName,
      _Reserved_ DWORD                dwReserved,
                 LPBINDSTATUSCALLBACK lpfnCB
    );
    https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms775123(v=vs.85)
    ...
    ..
    .

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn