Undefined reference podczas budowania Gtest

0

Hej

Mam projekt w do którego dodałem sobie testy jednostkowe przy użyciu Google Test. Wszystko działało pięknie do czasu aż ostatnio chciałem dodać jedną flage kompilacji (-gdwarf-4) w projekcie, zregenerowałem Makefile z cmake i przy kompilacji otrzymałem radosny błąd :

libgtest.a(gtest-all.cc.o): In function llvm::convertible_fwd_ostream::~convertible_fwd_ostream()': gtest-all.cc:(.text._ZN4llvm23convertible_fwd_ostreamD1Ev[_ZN4llvm23convertible_fwd_ostreamD1Ev]+0x20): undefined reference to llvm::~raw_os_ostream()'

Niestety po usunięciu dodanej flagi błąd pozostał. Build system mam spreparowany w nastepujacy sposob. Aplikacja właściwa tworzona jest przez taki CMakeFile.txt :

file(GLOB SOURCE_LST ".*h" "*.cpp" "*.hh")

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)

add_library(AppLib STATIC ${SOURCE_LST})
add_executable(App "main.cpp")
target_link_libraries(App AppLib)

A testy przez taki :

enable_testing()

## detect files
# files inside of project
file(GLOB TEST_SOURCE_LST ".*h" "*.cpp" "*.hh")
# Google test
find_package(GTest REQUIRED)


# add them into project
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS})

# create binary
add_executable(UTester ${TEST_SOURCE_LST})
target_link_libraries(UTester AppLib)
target_link_libraries(UTester ${GTEST_BOTH_LIBRARIES} 
                                          pthread)

add_test(initial UTester)

Próbowałem już zmieniać kolejność dodawania bibliotek ale też nie działa (stąd target_link_libraries rozbite na dwa, gdy jest pojedyncze też nie działa).

Próbowałem dodawać brakujące biblioteki żeby rozwiązać powstałe UR. Dla podanego błędu dodałem bibliteke libLLVMSupport.a i flage -ldl ale poskutkowało to tylko zmianą błedu na koleny UR :

comparatorTest.cpp undefined reference to `testing::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, testing::CodeLocation, void const*, void ()(), void ()(), testing::TestFactoryBase*)'

Macie może jakiś pomysł jak to naprawić? I co mnie bardziej ciekawi czemu to się popsuło? Nie sądze żeby przyczyną było dodanie flagi którą potem usunołem. Przy czym podkreślam że wcześniej te testy działały.

1

Pytanie: w jakiej libce jest klasa llvm::convertible_fwd_ostream, czy na pewno w tej, i czy ją dodajesz?

0

Hmmm sądziłem że to jest część gtest a konkretnie według komunikatu błędu część libgtest.a. Tylko że teraz tak patrze i widze że to jest jakiś llvmowy gtest. Musze sprawdzić dlaczego teraz zaczeło linkować z nim a nie z normalnym gtestem. Jest to jakiś trop.

0

Na przyszłość: używaj kontroli wersji, nawet lokalnie, w każdym projekcie. Będziesz miał możliwość powrotu do dowolnego stadium projektu i porównania wszelkich zmian.

0

I sprawa rozwiązana. Podczas instalacji clanga musiałem sobie przez przypadek nadpisac libgtest.a llvmową wersją tej biblioteki. Po zregenerowaniu biblioteki z gtest działa poprawnie. Ciekawe w tym wszystkim jest to że przez jakiś czas działało to poprawnie widać jakieś pliczki pośrednie były zachowane i libgtest.a nie brało udziału w budowaniu a po regeneracji MakeFile wszystko sie sypło.

System kontroli wersji mam (git) tyle że to nic nie dawało ponieważ podmieniona biblioteka była poza systemem kontroli (/usr/lib/libgtest.a).

Generalnie dziękuje za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1