Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Hướng dẫn cách biên dịch .dll file bằng Command Line CL.EXE trong Visual Studio

  1. #1
    Ngày gia nhập
    06 2012
    Bài viết
    18

    Mặc định Hướng dẫn cách biên dịch .dll file bằng Command Line CL.EXE trong Visual Studio

    Mình có code như sau:

    file header stdafx.h
    Code:
    #ifndef DLL_HEADER 
    #define DLL_HEADER 
    #include <windows.h> 
    #ifdef __cplusplus 
    #define EXPORT extern "C" __declspec(dllexport) 
    #else 
    #define EXPORT __declspec(dllexport) 
    #endif 
    EXPORT int nmultiply(int a, int b);
    //EXPORT int addition(int a, int b); 
    #endif
    file DLLMain.cpp
    Code:
    // dllmain.cpp : Defines the entry point for the DLL application.
    #include "stdafx.h"
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    	return TRUE;
    }
     EXPORT int nmultiply(int a, int b) 
     { 
    	 return a * b; 
     }
    Build bằng cách thông thường với visual studio thì ra file dllmain.dll kích thước 7Kb chạy ngon lành.

    Dùng Visual Studio 2008 Command Prompt biên dịch bằng đoạn lệnh: "CL /LD /Yc dllmain.dll" biên dịch thành công, ko có lỗi cho ra dllmain.dll kích thước 40Kb. nhưng không sử dụng được dllmain.dll này trong các ứng dụng khác.
    Vậy vấn đề của mình có thể nằm ở việc chọn option cho lệnh CL?! Bạn nào có kinh nghiệm, cho mình chút kinh nghiệm.
    (Hoặc nếu bạn biết 1 thông tin nào liên quan đến CL mong được học hỏi)

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

    Xem :
    https://msdn.microsoft.com/en-us/library/610ecb4h.aspx

    hoặc trong command line (cmd.exe)

    Với cấu hình (đường dẫn hợp lý)

    Batch Code:
    1. vcvars32
    2. cl /?

  3. #3
    Ngày gia nhập
    06 2012
    Bài viết
    18

    Cảm ơn bạn. Mình làm được rồi.

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

    Có vài cách làm khác gọn nhẹ hơn rất nhiều, mở vcxproj (vsProject/Solusion) bằng MsBuild.exe là xong.

    Path Os\Windows\Microsoft.NET\Framework\version\MsBuild .exe

    Syntax :
    MsBuild.exe /?

    Nếu bạn trình bày cách trên, tôi sẽ hướng dẫn cái này, đồng ý chứ ?

    Phọt mô xa 2016

  5. #5
    Ngày gia nhập
    06 2012
    Bài viết
    18

    Mình dùng CL.exe để thực hiện các mục đích khác nữa. Về MSBuild mình sẽ tìm hiểu nó khi mà Project của mình cần đến. Cảm ơn bạn đã có thiện chí giúp đỡ như vậy !!!

    - - - Nội dung đã được cập nhật ngày 15-11-2016 lúc 01:50 PM - - -

    Trích dẫn Nguyên bản được gửi bởi fms17 Xem bài viết
    Có vài cách làm khác gọn nhẹ hơn rất nhiều, mở vcxproj (vsProject/Solusion) bằng MsBuild.exe là xong.

    Path Os\Windows\Microsoft.NET\Framework\version\MsBuild .exe

    Syntax :
    MsBuild.exe /?

    Nếu bạn trình bày cách trên, tôi sẽ hướng dẫn cái này, đồng ý chứ ?

    Phọt mô xa 2016
    Nếu có thế, bạn thể giúp mình tùy chọn làm sao để .dll file sau khi biên dịch bằng CL.exe có size và code hợp lý và tối ưu nhất có thể. Vì hiện nay mình build bằng CL vẫn có kích thước lớn build theo các thông thường trong Visula Studio.

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

    Mặc định Hướng dẫn cách biên dịch .dll file bằng Command Line CL.EXE trong Visual Studio

    Hãy trình bày cái bạn biết trước.

    Vs chẳng qua là cái IDE thôi, làm trực tiếp với TBD sẽ có cùng kết quả khi chúng có cùng các opts

  7. #7
    Ngày gia nhập
    06 2012
    Bài viết
    18

    Đây là cách mà mình làm: Mình dùng .bat file để thực hiện điều này. Mỗi lần biên dịch mình chỉ cần run .bat file này. .bat file có mã như sau: CHú ý mình lưu file nguồn code ở C:\AI\DataFile\dllmain.cpp và mình muốn lưu .dll file build được trong C:\AI\DllFile . Các opt của mình CL /LD /I..\DataFile /Yc /TpC:\AI\DataFile\dllmain.cpp
    Code:
    echo off
    CALL "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
    cd "C:\AI\DllFile"
    SET INCLUDE = C:\AI\DataFile
    CL /LD /I..\DataFile /Yc /TpC:\AI\DataFile\dllmain.cpp
    DEL ..\DataFile\dllmain.pch
    DEL ..\DllFile\dllmain.exp
    DEL ..\DllFile\dllmain.lib
    DEL ..\DllFile\dllmain.obj

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

    Dos Code:
    1.  
    2. F:\_Abc_>cl /?
    3. Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
    4. Copyright (C) Microsoft Corporation.  All rights reserved.
    5.  
    6.                          C/C++ COMPILER OPTIONS
    7.  
    8.  
    9.                               -OPTIMIZATION-
    10.  
    11. /O1 minimize space                      /O2 maximize speed
    12. /Ob<n> inline expansion (default n=0)   /Od disable optimizations (default)
    13. /Og enable global optimization          /Oi[-] enable intrinsic functions
    14. /Os favor code space                    /Ot favor code speed
    15. /Ox maximum optimizations               /Oy[-] enable frame pointer omission
    16.  
    17.                              -CODE GENERATION-
    18.  
    19. /GF enable read-only string pooling     /Gm[-] enable minimal rebuild
    20. /Gy[-] separate functions for linker    /GS[-] enable security checks
    21. /GR[-] enable C++ RTTI                  /GX[-] enable C++ EH (same as /EHsc)
    22. /EHs enable C++ EH (no SEH exceptions)  /EHa enable C++ EH (w/ SEH exceptions)
    23. /EHc extern "C" defaults to nothrow
    24. /fp:<except[-]|fast|precise|strict> choose floating-point model:
    25.     except[-] - consider floating-point exceptions when generating code
    26.     fast - "fast" floating-point model; results are less predictable
    27. (press <return> to continue)
    28.     precise - "precise" floating-point model; results are predictable
    29.     strict - "strict" floating-point model (implies /fp:except)
    30. /Qfast_transcendentals generate inline FP intrinsics even with /fp:except
    31. /GL[-] enable link-time code generation /GA optimize for Windows Application
    32. /Ge force stack checking for all funcs  /Gs[num] control stack checking calls
    33. /Gh enable _penter function call        /GH enable _pexit function call
    34. /GT generate fiber-safe TLS accesses    /RTC1 Enable fast checks (/RTCsu)
    35. /RTCc Convert to smaller type checks    /RTCs Stack Frame runtime checking
    36. /RTCu Uninitialized local usage checks
    37. /clr[:option] compile for common language runtime, where option is:
    38.     pure - produce IL-only output file (no native executable code)
    39.     safe - produce IL-only verifiable output file
    40.     oldSyntax - accept the Managed Extensions syntax from Visual C++ 2002/2003
    41.     initialAppDomain - enable initial AppDomain behavior of Visual C++ 2002
    42.     noAssembly - do not produce an assembly
    43. /Gd __cdecl calling convention          /Gr __fastcall calling convention
    44. /Gz __stdcall calling convention        /GZ Enable stack checks (/RTCs)
    45. /QIfist[-] use FIST instead of ftol()
    46. /hotpatch ensure function padding for hotpatchable images
    47. /arch:<SSE|SSE2|AVX> minimum CPU architecture requirements, one of:
    48.     SSE - enable use of instructions available with SSE enabled CPUs
    49.     SSE2 - enable use of instructions available with SSE2 enabled CPUs
    50.     AVX - enable use of Intel(R) Advanced Vector Extensions instructions
    51. /Qimprecise_fwaits generate FWAITs only on "try" boundaries, not inside "try"
    52. (press <return> to continue)
    53. /Qsafe_fp_loads generate safe FP loads
    54.  
    55.                               -OUTPUT FILES-
    56.  
    57. /Fa[file] name assembly listing file    /FA[scu] configure assembly listing
    58. /Fd[file] name .PDB file                /Fe<file> name executable file
    59. /Fm[file] name map file                 /Fo<file> name object file
    60. /Fp<file> name precompiled header file  /Fr[file] name source browser file
    61. /FR[file] name extended .SBR file       /Fi[file] name preprocessed file
    62. /doc[file] process XML documentation comments and optionally name the .xdc file
    63.  
    64.                               -PREPROCESSOR-
    65.  
    66. /AI<dir> add to assembly search path    /FU<file> forced using assembly/module
    67. /C don't strip comments                 /D<name>{=|#}<text> define macro
    68. /E preprocess to stdout                 /EP preprocess to stdout, no #line
    69. /P preprocess to file                   /Fx merge injected code to file
    70. /FI<file> name forced include file      /U<name> remove predefined macro
    71. /u remove all predefined macros         /I<dir> add to include search path
    72. /X ignore "standard places"
    73.  
    74.                                 -LANGUAGE-
    75.  
    76. /Zi enable debugging information        /Z7 enable old-style debug info
    77. (press <return> to continue)
    78. /Zp[n] pack structs on n-byte boundary  /Za disable extensions
    79. /Ze enable extensions (default)         /Zl omit default library name in .OBJ
    80. /Zg generate function prototypes        /Zs syntax check only
    81. /vd{0|1|2} disable/enable vtordisp      /vm<x> type of pointers to members
    82. /Zc:arg1[,arg2] C++ language conformance, where arguments can be:
    83.     forScope[-] - enforce Standard C++ for scoping rules
    84.     wchar_t[-] - wchar_t is the native type, not a typedef
    85.     auto[-] - enforce the new Standard C++ meaning for auto
    86.     trigraphs[-] - enable trigraphs (off by default)
    87. /ZI enable Edit and Continue debug info
    88. /openmp enable OpenMP 2.0 language extensions
    89.  
    90.                               -MISCELLANEOUS-
    91.  
    92. @<file> options response file           /?, /help print this help message
    93. /bigobj generate extended object format /c compile only, no link
    94. /errorReport:option Report internal compiler errors to Microsoft
    95.     none - do not send report
    96.     prompt - prompt to immediately send report
    97.     queue - at next admin logon, prompt to send report (default)
    98.     send - send report automatically
    99. /FC use full pathnames in diagnostics   /H<num> max external name length
    100. /J default char type is unsigned
    101. /MP[n] use up to 'n' processes for compilation
    102. (press <return> to continue)
    103. /nologo suppress copyright message      /showIncludes show include file names
    104. /Tc<source file> compile file as .c     /Tp<source file> compile file as .cpp
    105. /TC compile all files as .c             /TP compile all files as .cpp
    106. /V<string> set version string           /w disable all warnings
    107. /wd<n> disable warning n                /we<n> treat warning n as an error
    108. /wo<n> issue warning n once             /w<l><n> set warning level 1-4 for n
    109. /W<n> set warning level (default n=1)   /Wall enable all warnings
    110. /WL enable one line diagnostics         /WX treat warnings as errors
    111. /Yc[file] create .PCH file              /Yd put debug info in every .OBJ
    112. /Yl[sym] inject .PCH ref for debug lib  /Yu[file] use .PCH file
    113. /Y- disable all PCH options             /Zm<n> max memory alloc (% of default)
    114. /Wp64 enable 64 bit porting warnings
    115.  
    116.                                 -LINKING-
    117.  
    118. /LD Create .DLL                         /LDd Create .DLL debug library
    119. /LN Create a .netmodule                 /F<num> set stack size
    120. /link [linker options and libraries]    /MD link with MSVCRT.LIB
    121. /MT link with LIBCMT.LIB                /MDd link with MSVCRTD.LIB debug lib
    122. /MTd link with LIBCMTD.LIB debug lib
    123.  
    124.                          -CODE ANALYSIS-
    125.  
    126. /analyze[:WX-] enable code analysis
    127.     WX- - code analysis warnings should not be treated as errors even if /WX is invoked
    128. (press <return> to continue)

    Cũng vậy, có thể editor / viết lại vcxproj theo như bạn muốn.

    Cách khác là dùng makefile, nMake

    Xem thêm:
    http://diendan.congdongcviet.com/threads/t378322::build-make-file.cpp

  9. #9
    Ngày gia nhập
    06 2012
    Bài viết
    18

    Các option đó mình biết. Nhưng phối hợp làm sao để ra cái .dll tối ưu nhất thì chưa rõ.
    Mình lục tung cả cái msdn của Microsoft rồi. Mà không thấy nói tới.
    https://msdn.microsoft.com/en-us/library/19z1t1wy.aspx

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

    Ở trên bạn mới sử dụng :
    CL /LD /I..\DataFile /Yc /TpC:\AI\DataFile\dllmain.cpp

    /LD Create .DLL
    /I<dir> add to include search path
    /Yc[file] create .PCH file
    /Tp<source file> compile file as .cpp

    Phọt mô xa 2016

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