C++ コードを「gcc」にリンクする (g++ なし)
質問
こんにちは、みんな:簡単な質問:「gcc」のみを使用して(g++を使用せずに)C++実行可能ファイルを生成すると便利な状況にあります。その理由は、「g++」(さらに言えば「c++」)コマンドを認識しない自動送信サーバーにコードを送信する必要があるためです。
私の実験では、 コンパイル gccはうまく機能します。問題は、生成されたオブジェクト ファイルをリンクしようとすると、めちゃくちゃになってしまうことです。さて、gcc の man ページから私が理解したことに基づくと (かなり外れているかもしれないので、もしそうなら教えてください)、g++ は基本的に gcc ですが、C++ ライブラリにリンクしています。
これが本当の場合、(可能であれば) C++ ライブラリを明示的にリンクするにはどうすればよいですか? それなし g++ (または c++) コマンドを使用しますか?
編集: 問題をわかりやすく説明するために Makefile を追加しています。
COMPILER = gcc
CFLAGS = -Wall -g -x c++
# MODULE COMPILATION
model: modules/model.h modules/sources/model.cpp
$(COMPILER) $(CFLAGS) -c modules/sources/model.cpp -o obj/model.o
algorithms: modules/algorithms.h modules/sources/algorithms.cpp
$(COMPILER) $(CFLAGS) -c modules/sources/algorithms.cpp -o obj/algorithms.o
io: modules/io.h modules/sources/io.cpp
$(COMPILER) $(CFLAGS) -c modules/sources/io.cpp -o obj/io.o
stopwatch: modules/stopwatch.h modules/sources/stopwatch.cpp
$(COMPILER) $(CFLAGS) -c modules/sources/stopwatch.cpp -o obj/stopwatch.o
# EXECUTABLE GENERATION
exe: model algorithms io stopwatch
$(COMPILER) $(CFLAGS) main.cpp obj/model.o obj/algorithms.o obj/io.o obj/stopwatch.o -o bin/process
# DEFAULT TEST CASE
run: exe
./bin/process -i data/nasa_small.log -a data/nasa_small.access -s data/nasa_small.stack
# CLEANING ROUTINE
clean:
rm -f obj/*
解決
標準 C++ ライブラリを -l
gcc にフラグを設定します。
gcc cplusplus.o -lstdc++ -o myexe
他のヒント
" -v"を指定してg ++を実行する場合オプションでは、使用するコマンドとオプションが表示されます。そこから正しいgccコマンドラインを推測できるはずです。
所属していません StackOverflow