【问题标题】:g++ link problems: In function `_start': (.text+0x20): undefined reference to `main'g++ 链接问题:在函数`_start'中:(.text+0x20): undefined reference to `main'
【发布时间】:2013-08-16 07:03:10
【问题描述】:

我得到一个未定义的对 main 错误的引用——即使我已经定义了 main 和 (AFAICT),我已经正确地链接了它。这是我的代码和我使用的命令:

// ################################################
//proj1.h
#ifndef  __SCRATCH_PROJ1_H
#define  __SCRATCH_PROJ1_H

int addOne(int i);

#endif /*__SCRATCH_PROJ1_H */

// ################################################

//proj1.cpp
#include "proj1.h"

int addOne(int i){
    return i+1;
}


// ################################################
//proj1_unittest.cpp

#include "proj1.h"
#include "gtest/gtest.h"

// Test Function
TEST(addOneTest, Positive) {
    EXPECT_EQ(1,addOne(0));            
    EXPECT_EQ(2,addOne(1));            
    EXPECT_EQ(40320, addOne(40319));   
}

TEST(addOneTest, Negative) {
    EXPECT_FALSE(addOneTest(-1));      
}


GTEST_API_ int main(int argc, char **argv) {
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

这是控制台输出:

$ g++ -isystem -pthread -c ${SOURCE_DIR}/proj1.c -o ${SOURCE_DIR}/proj1.o
$ g++ -o ${SOURCE_DIR}/mytest ${SOURCE_DIR}/*.o -L${GTEST_DIR} libgtest.a 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

为什么链接器找不到main()函数?

【问题讨论】:

  • GTEST_API_ 解析为什么?
  • gtest 在你当前的项目目录中吗?
  • 另外,请注意,您需要将输入提供给链接器 gtest 库,其中包含 gtest.libgtest_main.lib

标签: c++ linker g++


【解决方案1】:

据我所知,您没有编译文件 proj1_unittest.cpp(正如您的代码注释所具有的那样)/ proj1_unittest.c(正如您的控制台输出所暗示的那样)。

【讨论】:

  • 是的,我忘了编译包含主要内容的 .cpp 文件 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多