gpt4 book ai didi

c++ - 生成文件错误 : undefined reference to main

转载 作者:可可西里 更新时间:2023-11-01 17:09:09 24 4
gpt4 key购买 nike

我正在尝试使用 make 编译我的代码。通常我这样编译我的代码:

mipsisa32r2el-timesys-linux-gnu-g++ -o testing -I/usr/include/libxml2 -L/develop/xc4/rootfs/parsecpp/lib -L/develop/xc4/rootfs/parsecpp/sqlite-mips2/lib -I/develop/xc4/rootfs/parsecpp/sqlite-mips2/include db.cpp main.cpp networkinterfacemodule.cpp network.cpp multiplex.cpp program.cpp service.cpp -lsqlite3 -lxml2

为了摆脱这个长命令,我尝试编写一个 makefile:

CC= mipsisa32r2el-timesys-linux-gnu-g++

export LD_LIBRARY_PATH=:/parsecpp/sqlite-mips2/lib:/parsecpp/lib:/tmp/vixs_temp/DirectFB/single_core/lib


CFLAGS=-I/usr/include/libxml2 -I/develop/xc4/rootfs/parsecpp/sqlite-mips2/include

LDFLAGS=-L/develop/xc4/rootfs/parsecpp/lib -L/develop/xc4/rootfs/parsecpp/sqlite-mips2/lib

LIBS = -lsqlite3 -lxml2

PROG=testing

all: main.o db.o mod.o multiplex.o network.o networkinterfacemodule.o program.o service.o
$(CC) -o $(PROG) $(CFLAGS) $(LDFLAGS) main.o db.o mod.o multiplex.o network.o networkinterfacemodule.o program.o service.o $(LIBS)

main.o: main.cpp
$(CC) $(CFLAGS) $(LDFLAGS) main.cpp db.cpp networkinterfacemodule.cpp mod.cpp multiplex.cpp network.cpp program.cpp service.cpp $(LIBS)

db.o: db.cpp
$(CC) $(CFLAGS) $(LDFLAGS) db.cpp $(LIBS)


mod.o: mod.cpp
$(CC) $(CFLAGS) $(LDFLAGS) mod.cpp $(LIBS)

multiplex.o: multiplex.cpp
$(CC) $(CFLAGS) $(LDFLAGS) multiplex.cpp $(LIBS)

network.o: network.cpp
$(CC) $(CFLAGS) $(LDFLAGS) network.cpp $(LIBS)

networkmoduleinterface.o: networkinterfacemodule.cpp
$(CC) $(CFLAGS) $(LDFLAGS) networkinterfacemodule.cpp $(LIBS)

program.o: program.cpp
$(CC) $(CFLAGS) $(LDFLAGS) program.cpp $(LIBS)

service.o: service.cpp
$(CC) $(CFLAGS) $(LDFLAGS) service.cpp $(LIBS)

clean:
rm -rf *o testing

然后我得到这个错误:

/opt/timesys/linux-gnu/toolchain/bin/../../toolchain/lib/crt1.o: In function `__start':
(.text+0xc): undefined reference to `main'
/opt/timesys/linux-gnu/toolchain/bin/../../toolchain/lib/crt1.o: In function `__start':
(.text+0x10): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [db.o] Error 1

谁能帮帮我?

最佳答案

只要您只是编译文件而不链接它,请使用“-c”标志。

例如:-

db.o: db.cpp 
$(CC) -c $(CFLAGS) $(LDFLAGS) db.cpp $(LIBS)

此外,在编译时,不需要向编译器提供“$(LIBS)”,仅在链接时提供。您也不需要链接器标志,因为在使用“-c”标志时不会调用链接器。

所以你可以这样写,

 db.o: db.cpp 
$(CC) -c $(CFLAGS) db.cpp

更新(基于评论):-

链接文件时,链接器需要一个且只有一个main 函数。在上述情况下,main 函数未在 db.cpp 中定义,因此尽管编译成功,但链接器会抛出错误,因为它找不到 main 函数。

关于c++ - 生成文件错误 : undefined reference to main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11225118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com