Не удалось собрать gtest на MacC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Не удалось собрать gtest на Mac

Сообщение Anonymous »

У меня была похожая проблема до того, как я начал использовать чип Mac Arm. Но сейчас я не могу понять, что я делаю не так.
При построении теста я получаю следующую ошибку:
Undefined symbols for architecture arm64:
"_main", referenced from:

ld: symbol(s) not found for architecture arm64
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

Это на Mac:
> uname -a
Darwin Martins-MacBook-Pro-2.local 25.0.0 Darwin Kernel Version 25.0.0: Wed Sep 17 21:41:45 PDT 2025; root:xnu-12377.1.9~141/RELEASE_ARM64_T6000 arm64

Есть ли способ убедиться, что все мои файлы собираются для процессора «arm64» (т. е. я случайно не создаю один из файлов в режиме обратной совместимости)?
Система сборки «под капотом» делает следующее:
Она собирает тестовые библиотеки Google с такой конфигурацией:
cd ${GTEST_ROOT}
g++ -std=c++20 -I${GTEST_ROOT}/googletest/include -I${GTEST_ROOT}/googletest -c ${GTEST_ROOT}/googletest/src/gtest-all.cc
g++ -std=c++20 -I${GTEST_ROOT}/googletest/include -I${GTEST_ROOT}/googletest -c ${GTEST_ROOT}/googletest/src/gtest_main.cc
ar -rv libgtest.a gtest-all.o gtest_main.o

Я проверил, что main() находится в статической библиотеке:
> nm ${GTEST_ROOT}/libgtest.a | grep main
gtest_main.o:
0000000000000000 T _main

Тогда мой файл сборки:
g++ \
-o coverage/unittest.prog \
-L/opt/homebrew/lib \
coverage/BasicUpTest.o \
coverage/FixTest.o \
coverage/FrameTest.o \
coverage/unittest.o \
-fPIC \
-g \
-std=c++20 \
-L./coverage \
-lUnitTest \
-L../coverage \
-L${GTEST_ROOT} \
-lgtest \
-fprofile-arcs \
-ftest-coverage \
-lpthread


Подробнее здесь: https://stackoverflow.com/questions/798 ... est-on-mac
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»