2016年8月18日 星期四

當程式想要編譯成單一執行檔時需要做以下的設定
1. 將設定裡面 Linker 中的 "Dynamic RTL" 關掉
2. 將設定裡面 Packages 中的 "Link with runtime packages"關掉

但是在 XE10 這樣子是不夠的,
因為這樣做了之後執行程式還是會跳出需要 "BORLNDMM.DLL" 的訊息

有幾個處理辦法
1. 升級成 update1
2. 將設定中的 Use "classic" Borland compiler 關掉
3. 重新產生一個 "memmgr.lib"

第一個辦法因為還要升級費所以不可行..  HotFix也沒出就出Update檔
可以還要買授權, 越來越覺得不該使用Embarcadero了

第二個辦法是關掉後卻會產生其他的 Error, 暫時不想解決這些問題, 所以也不管他

第三個辦法的作法如下
  1. 使用impdef 將 borlndmm.dll 的定義檔匯出成memmgr.def
        impdef memmgr.def borlndmm.dll
  2. 使用編輯軟體編輯memmgr.def
  3. 將以下幾行用分號註解掉
;    __dbk_fcall_wrapper            @2   ; __dbk_fcall_wrapper

;    dbkFCallWrapperAddr            @1   ; dbkFCallWrapperAddr

  4. 使用implib 將 memmgr.def 產生成 memmgr.lib並覆蓋掉舊的
      (舊的記得備份)

C++ Builder 產生單一執行檔的方法

當程式想要編譯成單一執行檔時需要做以下的設定
1. 將設定裡面 Linker 中的 "Dynamic RTL" 關掉
2. 將設定裡面 Packages 中的 "Link with runtime packages"關掉

但是在 XE10 這樣子是不夠的,
因為這樣做了之後執行程式還是會跳出需要 "BORLNDMM.DLL" 的訊息

有幾個處理辦法

1. 升級成 update1
2. 將設定中的 Use "classic" Borland compiler 關掉
3. 重新產生一個 "memmgr.lib"

第一個辦法因為還要升級費所以不可行..  HotFix也沒出就出Update檔

可以還要買授權, 越來越覺得不該使用Embarcadero了

第二個辦法是關掉後卻會產生其他的 Error, 暫時不想解決這些問題, 所以也不管他


第三個辦法的作法如下

  1. 使用impdef 將 borlndmm.dll 的定義檔匯出成memmgr.def
        impdef memmgr.def borlndmm.dll
  2. 使用編輯軟體編輯memmgr.def
  3. 將以下幾行用分號註解掉
;    __dbk_fcall_wrapper            @2   ; __dbk_fcall_wrapper

;    dbkFCallWrapperAddr            @1   ; dbkFCallWrapperAddr

  4. 使用implib 將 memmgr.def 產生成 memmgr.lib並覆蓋掉舊的
      (舊的記得備份)