2016-11-29 2 views
2

Я получаю трассировку стека, прежде чем главная:C++ выдаёт ошибку сегментации перед главным GTEST

#include <gtest/gtest.h> 

using namespace std; 

int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

StackTrace:

Программа получила сигнал SIGSEGV, неисправность Сегментация. 0x0000000000000000 in ??()

#0 0x0000000000000000 in ??() 
#1 0x00000000004e0b51 in std::locale::_S_initialize()() 
#2 0x00000000004e0b93 in std::locale::locale()() 
#3 0x000000000050d524 in std::ios_base::Init::Init()() 
#4 0x0000000000401581 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at /usr/include/c++/4.9/iostream:74 
#5 0x00000000004015b3 in _GLOBAL__sub_I_testsmain.cpp(void)() at ../../../bdf_cpp_tests/testsmain.cpp:18 
#6 0x000000000053cdd7 in __libc_csu_init() 
#7 0x000000000053c3de in generic_start_main() 
#8 0x000000000053c62a in __libc_start_main() 
#9 0x00000000004013f9 in _start() 

Это QMAKE 5,7 и г ++ 4.9.4

Я считаю, что это команда, которая работает:

g++ -c -m64 -pipe -std=gnu++11 -std=c++11 -Werror -pedantic -DTEST_RESOURCE_DIR=\"/home/eric/Documents/BDFCppLib/test_resources\" -DTEST_OUTPUT_DIR=\"/home/eric/Documents/BDFCppLib/test_resources/output\" -g -std=gnu++11 -Wall -W -fPIC -DDEBUG -I../../../bdf_cpp_tests -I/home/eric/Documents/BDFCppLib/shadow-ant/ubuntu64_gcc49_dev/bdf_cpp_tests -I../../../bdf_cpp_sdk/include -I../../../lib/ubuntu64_gcc49_dev/unpack/chunk_cpp/include -I../../../lib/ubuntu64_gcc49_dev/unpack/system/include -I/home/eric/Software/qt/5.7/gcc_64/mkspecs/linux-g++-64 -o testsmain.o ../../../bdf_cpp_tests/testsmain.cpp 

g++ -o ../../../build/ubuntu64_gcc49_dev/bin/bdf_cpp_run_tests testsmain.o testutils.o -pthread -lrt -L/home/eric/Documents/BDFCppLib/build/ubuntu64_gcc49_dev/lib -static -lbdf -L/home/eric/Documents/BDFCppLib/lib/ubuntu64_gcc49_dev/unpack/chunk_cpp/lib -static -lchunk -L/home/eric/Documents/BDFCppLib/lib/ubuntu64_gcc49_dev/unpack/system/lib -lgtest 

ОБНОВЛЕНИЕ 0: Я бегу в этом вопросе на Ubuntu 16.04. Я создал виртуальную машину с 14.04, скопировал код и все сработало. Нет segfault. Итак, что-то отличается от 16.04, что, кажется, вызывает это.

UPDATE 1: Я начинаю думать, что это вызвано googletest. Я не знаю, почему это сработает с 14.04, а не с 16.06. Все, что включает и использует тест Google, не сможет работать из-за немедленного segfault.

+0

Как выглядит ваш файл qmake? – Samer

+0

«Я считаю, что это команда, которая запускается». Это, конечно, не команда, которая запускает ссылку на вашу аварийную программу. [mcve] необходимо. –

+0

Просто добавила другую строку, это помогает? –

ответ

3

Почему вы используете gcc? Лучше использовать g++. Вышеприведенный код при компиляции с использованием g++ не генерирует ошибок, а при запуске выводит значение argc равным 1, а argv - некоторый случайный адрес, так как аргумент командной строки не предоставляется.

__static_initialization_and_destruction_0 возникает из-за gcc. gcc создает __static_initialization_and_destruction_0 для каждой единицы перевода, для которой требуются статические конструкторы. Затем он помещает __do_global_ctors_aux в раздел .ctors, который затем вызывает __static_initialization_and_destruction_0 на каждой единицы перевода.

+0

Извините, это использует g ++, я неправильно напечатал. Я добавляю строку, которая подходит к моему вопросу. –

Смежные вопросы