Отсутствующие символы - но символы существуют? - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь скомпилировать цель модульного тестирования с помощью googletest.Хотя он работает в одном проекте, он не может соединиться в другом проекте, и я пытаюсь понять, почему.

link.txt, сгенерированный CMake:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  -stdlib=libc++ -std=gnu++11 -g -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/runTests.dir/ATAppTests.cpp.o  -o runTests ../../src/targetLib.a ../../lib/libgtestd.a ../../lib/libgtest_maind.a ../../lib/libgmockd.a ../../lib/libgmock_maind.a ../../lib/libgmockd.a ../../lib/libgtestd.a 

результат выполнения этой команды:

Undefined symbols for architecture x86_64:
  "testing::internal::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, void const*, void (*)(), void (*)(), testing::internal::TestFactoryBase*)", referenced from:
      ___cxx_global_var_init in ATAppTests.cpp.o

Однако, выполнение nm указывает на наличие символа:

 $ nm --demangle ../../lib/libgtestd.a | grep 'MakeAndRegister'
000000000000ebe0 T testing::internal::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, testing::internal::CodeLocation, void const*, void (*)(), void (*)(), testing::internal::TestFactoryBase*)

Я не уверен, куда идти!

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Оказывается, у другого проекта, который я использую, есть встроенный старый заголовок gtest, который вместо этого был взят.

https://github.com/meekrosoft/fff/blob/master/gtest/gtest.h

0 голосов
/ 19 июня 2019

Бьюсь об заклад, порядок, в котором у вас есть статические библиотеки там!

Но теперь, когда вы определили файл, в котором отсутствует функция, вы можете немного поиграть, пока она не заработает. После исправления становится для вас совершенно очевидным, почему это должно быть в таком порядке, и вы будете удивляться, почему ваш компилятор не был умнее. Вы найдете много объяснений здесь на stackoverflow, потому что многие из нас имели эту проблему раньше:)

В настоящее время я не могу попробовать, но это - я считаю - многообещающее предположение:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -stdlib=libc++ -std=gnu++11 -g -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/runTests.dir/ATAppTests.cpp.o -o runTests ../../src/targetLib.a ../../lib/libgtestd.a ../../lib/libgtestd.a ../../lib/libgtest_maind.a ../../lib/libgmockd.a ../../lib/libgmock_maind.a ../../lib/libgmockd.a

...