2016-11-29 31 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(); 
} 

スタックトレース:

プログラムは、信号SIGSEGV、セグメンテーションフォールトを受けました。 の0x0000000000000000 ()

#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とg ++ 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 

UPDATE 0: を私はこの問題に実行していますよUbuntu 16.04。私は14.04でVMを作成し、コードをコピーしてすべてを動かしました。 segfaultはありません。だから、これを引き起こしていると思われる16.04については何か違いがあります。

更新1: 私はこれがgoogletestによって引き起こされていると考え始めています。 14.04で動作する理由と16.06で動作しない理由は分かりません。 Googleテストを含み使用するものは、即時セグメンテーションのために実行できません。

+0

qmakeファイルはどのように見えますか? – Samer

+0

"これは実行するコマンドだと信じています。"あなたのクラッシュするgtestプログラムをリンクするためのコマンドではありません。 [mcve]が必要です。 –

+0

ちょうど他の行が追加されましたが、それは役に立ちますか? –

答えて

3

なぜあなたはgccを使用していますか? g++を使用する方が良いです。上記のコードをg++でコンパイルすると、エラーは発生せず、実行時にargcの値が1に、argvがランダムなアドレスになります。コマンドライン引数がないためです。

__static_initialization_and_destruction_0gccのために発生します。 gccは、呼び出される静的コンストラクタを必要とするすべての変換単位に対して__static_initialization_and_destruction_0を作成します。次に__do_global_ctors_aux.ctorsセクションに置き、各翻訳単位で__static_initialization_and_destruction_0を呼び出します。

+0

申し訳ありません、これはg ++を使用しています。間違って入力しました。私は私の質問に実行する行を追加しています。 –

関連する問題