Используя gtest с g cc cpp, получил ошибку - collect2: error: ld вернул 1 состояние выхода - PullRequest
0 голосов
/ 24 марта 2020

Исходный код:

#include <stdio.h>
#include <gtest/gtest.h>
int main() {
    return 0;
}

Сообщение об ошибке:

happyjoo@D:~$ gcc test.cpp
/tmp/cctruZ9h.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x30): undefined reference to `std::ios_base::Init::Init()'
test.cpp:(.text+0x45): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status
happyjoo@D:~$ gcc -lpthread -lgtest test.cpp
/tmp/ccmuAM5q.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x30): undefined reference to `std::ios_base::Init::Init()'
test.cpp:(.text+0x45): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

Код очень прост, поэтому я не знаю, что не так. Если я прокомментирую #include <gtest/gtest.h>, мой код может быть выполнен нормально. Я думаю, это проблема gtest?

Я перехожу по ссылке Как настроить googletest в качестве общей библиотеки на linux. Но вместо копии я использовал make install. Получил что-то после использования sudo ldconfig -v | grep gtest. Не знаю, связаны ли они или нет.

$ sudo ldconfig -v | grep gtest
[sudo] password for happyjoo: 
/sbin/ldconfig.real: Can't stat /usr/local/lib/x86_64-linux-gnu: No such file or directory
/sbin/ldconfig.real: Path `/lib/x86_64-linux-gnu' given more than once
/sbin/ldconfig.real: Path `/usr/lib/x86_64-linux-gnu' given more than once
/sbin/ldconfig.real: /lib/x86_64-linux-gnu/ld-2.27.so is the dynamic linker, ignoring

        libgtest_main.so -> libgtest_main.so
        libgtest.so -> libgtest.so

Прежде чем я прокомментировал другой код, я получил много сообщений об ошибках, используя RUN_ALL_TESTS() и EXPECT_EQ. Я проверю это снова после исправления этой проблемы. Я думаю, это та же проблема.

Я буду очень признателен, если кто-то может помочь. Спасибо за каждого !!!

------------------------------- ОБНОВЛЕНИЕ ----- -----------------------------

(Собственно, я должен удалить вышеуказанную часть или уменьшить ее?)

Теперь согласно @David C. Ранкин, я должен использовать g ++ вместо g cc. Поэтому, когда я использую g ++, #include <gtest/gtest.h> не вызывает ошибок снова. Но когда я попробовал что-то, он сошел с ума и бросил много сообщений об ошибках, которые я даже не знаю, какую часть опубликовать. Я просто напишу немного, если мой вопрос станет слишком длинным.

Мой код:


#include <stdio.h>
#include <gtest/gtest.h>
// if it's prime
int is_prime(int x) {
    for (int i = 2; i * i < x; i++) {
        if (x % i == 0) return 0;
    }
    return 1;
}

// The first test
TEST(test1, test_is_prime) {
    EXPECT_EQ(is_prime(3), 1);
    EXPECT_EQ(is_prime(5), 1);
    EXPECT_EQ(is_prime(7), 1);
}

// The second test
TEST(test2, test_is_prime) {
    EXPECT_EQ(is_prime(4), 0);
    EXPECT_EQ(is_prime(0), 0);
    EXPECT_EQ(is_prime(1), 0);
}

int main() {
    return RUN_ALL_TESTS();
}

Мой ввод: $ g++ -lgtest -lpthread test.cpp

Часть ошибки сообщение:

/tmp/ccXSrziR.o: In function `test1_test_is_prime_Test::TestBody()':
test.cpp:(.text+0xac): undefined reference to `testing::Message::Message()'
test.cpp:(.text+0xdb): undefined reference to `testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)'
test.cpp:(.text+0xee): undefined reference to `testing::internal::AssertHelper::operator=(testing::Message const&) const'
test.cpp:(.text+0xfa): undefined reference to `testing::internal::AssertHelper::~AssertHelper()'
...
balabala
...
est.cpp:(.text._ZN24test2_test_is_prime_TestD2Ev[_ZN24test2_test_is_prime_TestD5Ev]+0x22): undefined reference to `testing::Test::~Test()'
/tmp/ccXSrziR.o:(.data.rel.ro._ZTV24test1_test_is_prime_Test[_ZTV24test1_test_is_prime_Test]+0x20): undefined reference to `testing::Test::SetUp()'
/tmp/ccXSrziR.o:(.data.rel.ro._ZTV24test1_test_is_prime_Test[_ZTV24test1_test_is_prime_Test]+0x28): undefined reference to `testing::Test::TearDown()'/tmp/ccXSrziR.o: In function `test1_test_is_prime_Test::~test1_test_is_prime_Test()':
test.cpp:(.text._ZN24test1_test_is_prime_TestD2Ev[_ZN24test1_test_is_prime_TestD5Ev]+0x22): undefined reference to `testing::Test::~Test()'
/tmp/ccXSrziR.o:(.data.rel.ro._ZTI24test2_test_is_prime_Test[_ZTI24test2_test_is_prime_Test]+0x10): undefined reference to `typeinfo for testing::Test'
/tmp/ccXSrziR.o:(.data.rel.ro._ZTI24test1_test_is_prime_Test[_ZTI24test1_test_is_prime_Test]+0x10): undefined reference to `typeinfo for testing::Test'
collect2: error: ld returned 1 exit status
...