1. ホーム
  2. c++

[解決済み] g++のリンクの問題。関数 `_start' で。(.text+0x20): `main' への未定義の参照。

2022-02-17 02:15:28

質問

mainを定義し、(AFAICT)正しくリンクしているにもかかわらず、mainへの未定義の参照というエラーが発生します。以下は、私のコードと使用したコマンドです。

// ################################################
//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() 関数がリンカによって発見されないのですか?

解決方法を教えてください。

私が見る限り、あなたはファイルproj1_unittest.cpp(あなたのコード・コメントにあるように)/ proj1_unittest.c(あなたのコンソール出力が示唆するように)コンパイルしていません。