私はAutools front-end for a C++ libraryで働いています。 LibtoolはCソースファイルをプロジェクトに追加しているため、一部のプラットフォームでかなりの量の問題が発生しているようです。原因不明のクラッシュがMessage “During startup program terminated with signal SIGKILL” from GDBのように発生していると考えられます。CではなくC++を使用するようにLibtoolに指示する方法は?
Cソースファイルはいくつかの理由で問題を引き起こします。まず、CXXFLAGS
をクエリし、AM_CXXFLAGS
と設定します。 CFLAGS
またはAM_CFLAGS
で何もしません。第2に、Cファイルには、GCCの-frtti
と-fexceptions
、IBM XL C/C++コンパイラの-qrtti
などのオプションのような、C++プロジェクトの追加オプションが必要です。 libtoolが必要なオプションを追加しているかどうかはわかりません。第3に、Libtoolによって追加されたCソースファイルには、CygwinやMSYSのようなNewlibを使用するプラットフォーム上で追加のPosixオプションが必要です。私たちのソースファイルにはオプションは必要ありません。
私はLibtoolにCの代わりにC++を使用させたいと思いますが、そうするためのオプションや方法を見つけることができませんでした。私は最も簡単な道は、lt-<some file>.c
とCFLAGS
ではなく、lt-<some file>.cpp
とCXXFLAGS
を使うことがLibtoolのものだと思うが、どうやってそれをするのか分からない。
LibtoolにCではなくCを使用するように指示するにはどうすればよいですか?
関連する問題はHow to disable C compiler in C++ Autotools projectですが、機能テストにはC++コンパイラを使用するように求められます。
'libtool'が本当にCソースファイルを追加している場合は、Cコンパイラでコンパイルする必要があります。 CとC++は異なる言語であり、それぞれ別の言語では機能しません。 C++コンパイラでCソースを正常にコンパイルできると仮定するのは一般的に安全ではありません。もし成功すれば、生成されたバイナリが、C++コンパイラから構築されたものと同等のセマンティクスを持つと仮定することは安全ではありません。 Cコンパイラによる同じソースが持っています。 –
しかし、このすべてのことは私にとって驚くべきことです。それはLTDLに関連していますか? 'libtool'がプロジェクトにランタイムコードを追加する必要がある他の理由は考えられません。 –
@JohnBollinger - 私は、Libtoolが実際のプログラム(またはlibtoolの一部のコンポーネント)を呼び出す何らかのラッパープログラムを追加したと思います。私はラッパーがコンパイルに失敗したときにしか気付かなかった。たとえば、[C++コンパイラ、Newlib、関数の暗黙の宣言 '_spawnv'](https://lists.gnu.org/archive/html/bug-libtool/2017-11/msg00002.html)を参照してください。 libtoolメーリングリスト。 – jww