質問

こんにちは、みんな:簡単な質問:「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コマンドラインを推測できるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top