配布アプリがBORLNDMM.DLLで警告されることについて

解決


初心者  2015-11-10 20:36:14  No: 47722

C++Builder10seattleでの問い合わせなのですが、すみません。
投稿ジャンルがなかったもので・・。

配布アプリのコンパイル後、他のPCで起動させるとBORLNDMM.DLLが無いと
怒られます。

XE8までと同じように動的RTL・パッケージははずしています。

10でできなくなってしまっているのはなぜでしょうか?
ちなみに、新規作成時のフォームだけでコンパイルでしてます。
コードすら書いていない状態です。

現行は、回避するために遅延読み込みDLLにBORLNDMM.DLLを設定してます。


take  2015-11-10 21:24:55  No: 47723

検索したら同じような内容が出てきましたけど
環境設定はXE8と同じということですよね?

https://www.petitmonte.com/bbs/answers?question_id=7587


初心者  2015-11-10 22:34:42  No: 47724

ご回答ありがとうございます。

発言前に、私も検索して閲覧しました。

この場合だと、質問者の方はネット上(ベクター)からランタイムを
ダウンロードして手動でインストールしています。

基本は、山本隆様のおっしゃる設定でランタイムなしの単一の exeで動作が
できると思っています。

ですが、10のみこの症状が起こるので質問させていただきました。

XE8までと書いたのは、同じ環境のPCで6/XE2/XE6/XE8では、
動的RTL・パッケージをはずして問題なく今までOKでしたということです。


通りすがり  2015-11-10 22:42:27  No: 47725

手元環境でテストしてみましたが、確かにC++Builder 10 SeattleではBORLNDMM.DLLに依存する実行ファイルになります。
原因などはこれから調べてみます…


通りすがり  2015-11-10 22:55:45  No: 47726

公式フォーラムの

RAD Studio 10 Seattlle C++ RTL Linker problem
https://forums.embarcadero.com/message.jspa?messageID=706862

で既出だったようです。QPにも登録済です。

[RSP-11768] BCC32 Classic standalone EXE links against BORLNDMM.DLL when it shouldnt - Embarcadero Technologies
https://quality.embarcadero.com/browse/RSP-11768

解決策は(おそらく)3つ。
1.新しい(Clangベースの)C++コンパイラを使う
2.BORLNDMM.DLLを遅延ロードとする(初心者さんが書いてますね)
3.memmgr.libを書き換える(フォーラムにもQPにもやり方が書いてありますが、コマンドラインツールのimpdef/implibを使ってインポートテーブルを書き換えるようです)


初心者  2015-11-11 00:04:21  No: 47727

回答ありがとうございます。

その後ですが・・・

2は、実際に過去のソースを10にしようとした際に他の.DLLも見つかない
と警告されたので、イタチごっごであきらめました。

で自己責任でXE8のmemmgr.libを10に移植しました。
今のところ、問題なく使えています。

メーカーからの修正パッチ又はバージョンアップのリリースを待ってみます。

ありがとうございました。


初心者  2015-11-11 01:40:12  No: 47728

回答者さんへの自分なりの返信がない気がしたので

通りすがりさんの回答で
①新しい(Clangベースの)C++コンパイラを使う・・・LLVMで最新をダウンロードして
  10に組込むってことで解釈しましたが、やり方が解らないことで断念しました。

②遅延ロードは、先に書いた通りで断念しました。

③memmgr.libを書き換えるは、自信がないので断念しました。

なので
C:\Program Files\Embarcadero\Studio\16.0\lib\win32\release\memmgr.lib

C:\Program Files\Embarcadero\Studio\17.0\lib\win32\releaseに上書しました。
こんな簡単なことで解消できるとは思ってませんがこれしかできないのが
今の現状です。(実際には、致命的な結果となるかもしれない??)
過去XE8ソース20個くらいリコンパイルしてみましたが、問題なし←(注)自分は

自分は、部品を貼って簡単なコード書くくらいしかできませんがプログラムは好きです。
C++Builderでもこんなサイトあるといいなぁ・・教材がすくないので^^;
デルファイ使いのみなさんが羨ましいです。

くだらないコメントしてすませんでした。では


通りすがり  2015-11-11 03:07:19  No: 47729

新しいC++のコンパイラを使用するにはプロジェクトオプションのC++コンパイラページの一番下、
従来のBorlandコンパイラを使用をチェックオフにするだけです。設定を切り替えたらメインメニューの
プロジェクト→...をクリーンアップで古いobjファイルを消去する必要があります(あるいは
プロジェクトフォルダの下のWin32\Debug、Win32\Releaseの下のobjファイルを全削除でもOK)。

ただし一つのプロジェクトの中で両方のコンパイラを使い分けることはできないのでご注意を。
普通は新しいC++コンパイラだけで大丈夫だと思います。C++11や最新のBoostの機能も使えるように
なりますし。


初心者  2015-11-11 04:17:27  No: 47730

度々お世話になります。

1はそういうことだったんですね。
それならやっていました。
でも、CLANGエラー  引数が不明です  -Vとかアルファベット??みたいな
エラーがたくさん出てきて迷宮入りしてしまいました・・・。

仕様を基礎からコツコツ学ばないとやっぱダメっすね(泣)
頑張ります


hidara  2015-12-01 21:05:20  No: 47731

とても参考になりました。
Clang に切り替えて対応できました。


通りすがり  2015-12-01 22:26:21  No: 47732

ちなみにUpdate Subscriptionに加入していれば、この件は10 Seattle Update 1で修正済です。


fujiwara  2015-12-24 03:50:08  No: 47733

10 Seattle Update1をインストールするとComPortコンポーネントが使えなくなった。
ComPortを使って作成した過去のプログラムもエラーが出て起動しなくなった。


fujiwara  2015-12-24 03:51:54  No: 47734

間違えました。解決してません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加