2009-06-16 7 views
24

こんにちはすべて:簡単な質問:「gcc」(g ++なし)を使用してC++の実行可能ファイルを生成すると便利な状況にあります。この理由は、 'g ++'(または 'C++')コマンドを認識しない自動提出サーバーにコードを提出しなければならないということです。「gcc」(g ++なし)とのリンク

私の実験では、 gccがコンパイルされています。問題は、私が生成されたオブジェクトファイルをリンクしようとすると、うんざりしてしまいます。さて、gccのmanページから理解したところに基づいて(gccのmanページから分かります)、g ++は基本的にgccですが、C++ライブラリにリンクしています。

もし可能であれば、を使わずに、どのようにC++ライブラリを明示的にリンクすることができますか?

EDIT:私はより良い問題を説明するための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/* 
+0

gccとg ++は、同じ実行可能ファイルを文字通り指します。唯一の違いは、バックエンドに渡されるフラグです。 –

+0

自動提出サーバーを修正してください! –

+0

オプションはありませんでした= D –

答えて

41

あなたはGCCに-lフラグが標準C++ライブラリをリンクすることができます。

gcc cplusplus.o -lstdc++ -o myexe 
+0

これはうまく動作します。リンクするライブラリの名前はわかりませんでした。 –

+0

私はこの技術を長年にわたって成功させてきました。しかし、私はUbuntu 11.10(gcc 4.6.1)にアップグレードしたばかりで、動作しなくなりました。私は今いくつかのマシンで ''演算子new(unsigned long) '"エラーへの未定義参照を取得しています。誰かのためにこの問題が起こっていますか? – mgiuca

+1

ああ、決して心配しないでください。私がoファイルの前に-lstdC++を置いていたからです。 GCCの新しいバージョンでは、oファイルの後ろにライブラリを置く必要があるようです。 – mgiuca

13

あなたの場合g ++を "-v"オプションで実行すると、どのコマンドとオプションが使用されているかが表示されます。そこから正しいgccコマンドラインを推測できるはずです。

+0

また素晴らしいソリューション! –

関連する問題