C++Builder10seattleでの問い合わせなのですが、すみません。
投稿ジャンルがなかったもので・・。
配布アプリのコンパイル後、他のPCで起動させるとBORLNDMM.DLLが無いと
怒られます。
XE8までと同じように動的RTL・パッケージははずしています。
10でできなくなってしまっているのはなぜでしょうか?
ちなみに、新規作成時のフォームだけでコンパイルでしてます。
コードすら書いていない状態です。
現行は、回避するために遅延読み込みDLLにBORLNDMM.DLLを設定してます。
検索したら同じような内容が出てきましたけど
環境設定はXE8と同じということですよね?
https://www.petitmonte.com/bbs/answers?question_id=7587
ご回答ありがとうございます。
発言前に、私も検索して閲覧しました。
この場合だと、質問者の方はネット上(ベクター)からランタイムを
ダウンロードして手動でインストールしています。
基本は、山本隆様のおっしゃる設定でランタイムなしの単一の exeで動作が
できると思っています。
ですが、10のみこの症状が起こるので質問させていただきました。
XE8までと書いたのは、同じ環境のPCで6/XE2/XE6/XE8では、
動的RTL・パッケージをはずして問題なく今までOKでしたということです。
手元環境でテストしてみましたが、確かにC++Builder 10 SeattleではBORLNDMM.DLLに依存する実行ファイルになります。
原因などはこれから調べてみます…
公式フォーラムの
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を使ってインポートテーブルを書き換えるようです)
回答ありがとうございます。
その後ですが・・・
2は、実際に過去のソースを10にしようとした際に他の.DLLも見つかない
と警告されたので、イタチごっごであきらめました。
で自己責任でXE8のmemmgr.libを10に移植しました。
今のところ、問題なく使えています。
メーカーからの修正パッチ又はバージョンアップのリリースを待ってみます。
ありがとうございました。
回答者さんへの自分なりの返信がない気がしたので
通りすがりさんの回答で
①新しい(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でもこんなサイトあるといいなぁ・・教材がすくないので^^;
デルファイ使いのみなさんが羨ましいです。
くだらないコメントしてすませんでした。では
新しいC++のコンパイラを使用するにはプロジェクトオプションのC++コンパイラページの一番下、
従来のBorlandコンパイラを使用をチェックオフにするだけです。設定を切り替えたらメインメニューの
プロジェクト→...をクリーンアップで古いobjファイルを消去する必要があります(あるいは
プロジェクトフォルダの下のWin32\Debug、Win32\Releaseの下のobjファイルを全削除でもOK)。
ただし一つのプロジェクトの中で両方のコンパイラを使い分けることはできないのでご注意を。
普通は新しいC++コンパイラだけで大丈夫だと思います。C++11や最新のBoostの機能も使えるように
なりますし。
度々お世話になります。
1はそういうことだったんですね。
それならやっていました。
でも、CLANGエラー 引数が不明です -Vとかアルファベット??みたいな
エラーがたくさん出てきて迷宮入りしてしまいました・・・。
仕様を基礎からコツコツ学ばないとやっぱダメっすね(泣)
頑張ります
とても参考になりました。
Clang に切り替えて対応できました。
ちなみにUpdate Subscriptionに加入していれば、この件は10 Seattle Update 1で修正済です。
10 Seattle Update1をインストールするとComPortコンポーネントが使えなくなった。
ComPortを使って作成した過去のプログラムもエラーが出て起動しなくなった。
間違えました。解決してません。
ツイート | ![]() |