使用'gcc'将C++代码链接起来(而不使用g++)

32

大家好:我有一个问题:目前情况是只能使用“gcc”(不使用g ++)生成我的C ++可执行文件,因为我必须将代码提交到无法识别“g++”(或“c++”,同样的原因)命令的自动提交服务器。

在我的实验中,当我编译时,gcc可以正常工作。问题是,当我尝试链接生成的目标文件时,它会出现问题。现在,根据我从gcc手册中了解到的内容(如果我理解错误,请告诉我),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/*

gcc和g++实际上指向同一个可执行文件。唯一的区别是传递给后端的标志。 - Martin York
修复自动提交服务器! - Keith Thompson
2个回答

50

你可以使用-l标志将标准C++库与gcc链接:

gcc cplusplus.o -lstdc++ -o myexe

这很好用,我不知道链接它的库的名称。 - Rafael Almeida
我已经成功地使用这种技术多年了。但是我刚刚升级到Ubuntu 11.10(gcc 4.6.1),它停止工作了。现在我在几台机器上都遇到了“undefined reference to `operator new(unsigned long)’”的错误。有其他人遇到过这个问题吗? - mgiuca
1
哦,没关系。这是因为我一直在o文件之前放置-lstdc++。较新版本的GCC似乎要求您在o文件之后放置库。 - mgiuca
这个链接是指向动态库还是静态库?我注意到在我的系统上stdc++有.so和.a文件。 - khatchad

16

如果你在使用 g++ 时带上 "-v" 选项,它会显示出所使用的命令和选项。你应该可以从中推断出正确的 gcc 命令行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接