質問内容
以下の提示コードですがコンパイルしてMain.cppに組み込みコンパイルして実行すると
以下のエラーが出ますこれは何が原因なのでしょうか?../sysdeps/unix/sysv/linux/raise.c
について調べましたがライブラリではないようなのでインストールするといった対処方法ではないようでChatGDTに質問しましたが具体的な対処方法がわかりません。
../sysdeps/unix/sysv/linux/raise.c:50 50 ../sysdeps/unix/sysv/linux/raise.c: そのようなファイルやディレクトリはありません.
つまり../sysdeps/unix/sysv/linux/raise.c:
は一体なんでしょうか?
実現したいこと
エラー原因と対処方法が知りたい
前提
OS: ubuntu
言語: C++
protoc version:
> protoc --version libprotoc 3.6.1
発生している問題・エラーメッセージ
> ./my_program 18:07:54 terminate called after throwing an instance of 'std::system_error' what(): Unknown error -1 fish: './my_program' terminated by signal SIGABRT (Abort)
該当のソースコード
Main.cpp
cpp
1#include <iostream> 2#include "sample.pb.h" 3 4int main() 5{ 6 std::cout<<std::system_error().what()<<std::endl; 7 Human::Person person; 8 9 person.set_name("John Doe"); 10 person.set_id(123); 11 12 // Serialize the Person message to a string 13 std::string serialized_data; 14 person.SerializeToString(&serialized_data); 15 16 std::cout<<serialized_data<<std::endl; 17 // Deserialize the string back to a Person message 18 Human::Person deserialized_person; 19 deserialized_person.ParseFromString(serialized_data); 20 21 // Print the deserialized data 22 std::cout << "Name: " << deserialized_person.name() << std::endl; 23 std::cout << "ID: " << deserialized_person.id() << std::endl; 24 25 return 0; 26}
sample.proto
syntax = "proto3"; package Human; message Person { string name = 1; int32 id = 2; }
test.proto
syntax = "proto3"; import "sample.proto"; message Test { Human.Person human = 1; }
試したこと
実行したコマンド
> g++ Main.cpp sample.pb.cc test.pb.cc -o my_program -lprotobuf > ./my_program
> gdb
terminate called after throwing an instance of 'std::system_error' what(): Unknown error -1 Program received signal SIGABRT, Aborted. __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50 ../sysdeps/unix/sysv/linux/raise.c: そのようなファイルやディレクトリはありません. (gdb) traceback Undefined command: "traceback". Try "help". (gdb) bt #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007ffff78e9859 in __GI_abort () at abort.c:79 #2 0x00007ffff7b728d1 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #3 0x00007ffff7b7e37c in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #4 0x00007ffff7b7e3e7 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x00007ffff7b7e699 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x00007ffff7b756fd in std::__throw_system_error(int) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #7 0x00007ffff7dc8c0f in ?? () from /usr/lib/x86_64-linux-gnu/libprotobuf.so.17 #8 0x00007ffff7fe0b9a in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffd928, env=env@entry=0x7fffffffd938) at dl-init.c:72 #9 0x00007ffff7fe0ca1 in call_init (env=0x7fffffffd938, argv=0x7fffffffd928, argc=1, l=<optimized out>) at dl-init.c:30 #10 _dl_init (main_map=0x7ffff7ffe190, argc=1, argv=0x7fffffffd928, env=0x7fffffffd938) at dl-init.c:119 #11 0x00007ffff7fd013a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2 #12 0x0000000000000001 in ?? () #13 0x00007fffffffdcf3 in ?? () #14 0x0000000000000000 in ?? ()
Chatgdt 回答
std::system_errorが "Unknown error -1" となっており、それに関連するエラーが見つかっていません。しかし、スタックトレースを見ると、libprotobuf.so.17 からのエラーが発生しているようです。 ここからいくつかの手順を提案します: Protocol Buffersのバージョンの確認: 使用している Protocol Buffers ライブラリが、プログラムで使用している .proto ファイルとの互換性があるか確認してください。バージョンが異なる場合、互換性のないライブラリがエラーを引き起こす可能性があります。 ライブラリの再インストール: Protocol Buffers ライブラリを再インストールしてみてください。Ubuntuの場合、protobuf-compilerとlibprotobuf-devを再インストールすることができます。
参考サイト
A: https://github.com/microsoft/vscode-cpptools/issues/4686
ソースファイルを編
一つづつコメントアウトしてコンパイルして実行を繰り返し実験しましたがインクルードを外すと正常に実行できるため
ProtocolBuffers
のsample.pb.h
が原因と考えました
あなたの回答
tips
プレビュー