Open tkdlqm2 opened 3 years ago
@ygnkim 넵 알겠습니다!
해결한 warning
BitcoinNodePrimitives.cpp:335:16: warning: ignoring return value of ‘bool DecodeHexTx(CMutableTransaction&, const string&, bool, bool)’, declared with attribute nodiscard [-Wunused-result]
DecodeHexTx(mtx, txstr, true);
원인 : return를 담을 변수 선언을 해야함 해결 : return_value 변수에 DecodeHexTx 함수의 리턴 값을 담아줌.
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
원인 : apt install 은 stable하지 못함. 해결 : apt-get install 로 stable 하게 함.
leveldb/util/logging.cc: In function ‘bool leveldb::ConsumeDecimalNumber(leveldb::Slice*, uint64_t*)’:
leveldb/util/logging.cc:58:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
(v == kMaxUint64/10 && delta > kMaxUint64%10)) {
원인 : 변수 타입이 다른 변수를 비교함. 해결 : 변수 타입을 맞춰줌.
rpc/mining.cpp: In function ‘void setgenerateBlocksPoW(const CScript&)’:
rpc/mining.cpp:142:35: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (conflict_flag = _check_new_block_accepted(pblock)) {
원인 : 부호 비교 과정에서 "==" 이것을 "=" 으로 표현하여 "="하나가 누락됨. 해결 : 누락된 것을 채워넣음.
python setup.py --test 시 발생되는 warning list
cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++
cc1plus 컴파일러는 c++ 전용 컴파일러인데 clang 컴파일러 옵션 값을 "std=99" 설정해주어 발생하는 경고문.
해결 못한 warning list
bitcoind.cpp: In function ‘int exported_main()’:
bitcoind.cpp:220:33: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
char * array[] = {"exported"};
원인 : 데이터 타입 문제. 아직 해결안됨 (customed bitcoin이라 해결 금방할듯)
/usr/include/pthread.h: In function ‘__pthread_unwind_next’:
/home/mong/dependency/test/test/test/blockchain-sim/shadow/src/preload/shd-preload-defs.h:281:1: warning: ‘noreturn’ function does return
PRELOADDEF( , void, __pthread_unwind_next, (__pthread_unwind_buf_t *a), a);
^~~~~~~~~~
/usr/include/stdlib.h: In function ‘exit’:
/home/mong/dependency/test/test/test/blockchain-sim/shadow/src/preload/shd-interposer.c:419:1: warning: ‘noreturn’ function does return
}
^
/usr/include/pthread.h: In function ‘pthread_exit’:
/home/mong/dependency/test/test/test/blockchain-sim/shadow/src/preload/shd-interposer.c:429:1: warning: ‘noreturn’ function does return
}
^
/usr/include/stdlib.h: In function ‘abort’:
/home/mong/dependency/test/test/test/blockchain-sim/shadow/src/preload/shd-interposer.c:439:1: warning: ‘noreturn’ function does return
}
ev.c:2143:31: warning: ‘ev_default_loop_ptr’ initialized and declared ‘extern’
EV_API_DECL struct ev_loop *ev_default_loop_ptr = 0; /* needs to be initialised to make it a definition despite extern */
ev.c:2805:11: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write (evpipe [1], &counter, sizeof (uint64_t));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ev.c:2817:11: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write (evpipe [1], &(evpipe [1]), 1);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ev.c: In function ‘pipecb’:
ev.c:2838:11: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result]
read (evpipe [1], &counter, sizeof (uint64_t));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ev.c:2852:11: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result]
read (evpipe [0], &dummy, sizeof (dummy));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../dist/../dbinc/atomic.h:179:19: warning: conflicting types for built-in function ‘__atomic_compare_exchange’ [-Wbuiltin-declaration-mismatch]
static inline int __atomic_compare_exchange(
/home/mong/dependency/test/test/test/blockchain-sim/shadow/src/external/rpth/pth_high.c:1693:13: warning: unused variable 'ev_occurred' [-Wunused-variable]
int ev_occurred = pth_event_status(ev) == PTH_STATUS_OCCURRED;
make[3]: warning: -jN forced in submake: disabling jobserver mode.
make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
CMake는 build system으로서 make의 과정을 자동화 하여 컴파일을 해줌. 그렇기에 Make build를 직접 작성할 필요가 없음. 하지만 BLEEP 프로젝트는 sub-CMakeLists 들이 존재하기에, 이 말은 sub-make 가 존재하고, sub-make에서 -j 옵션을 사용하기 위해서 다음과 같은 설정이 필요함.
Sub-make must be called using $(MAKE) expression (not just plain make). Alternatively the + prefix can be added before make command. See this answer for details.
하지만 Make를 직접 작성하지 않기에, 이 경고문을 없애는 과정이 어려울 것 같음.
위에 둘다 CMake 관련 warning 임.
shadow_interface.c:27:12: warning: implicit declaration of function ‘pipe2’; did you mean ‘pipe’? [-Wimplicit-function-declaration]
return pipe2(pipefds, flags);
^~~~~
pipe
configure: WARNING: Disabling statically generated ecmult table because the native compiler gcc does not produce working binaries. Please set CC_FOR_BUILD, CFLAGS_FOR_BUILD, CPPFLAGS_FOR_BUILD, and/or LDFLAGS_FOR_BUILD.
원인 : 실행 파일을 생성하지 않는 경고 (shared object를 생성하기에)
How to reproduce
bitcoin 의 warning 을 수정하고나서 regtest를 수행해본 결과 다음과 같은 에러사항이 있음.
위 에러의 원인은 비트코인 함수 중 setgenerateBlocksPoW 수행하는 과정에서 warning을 해결하기
rpc/mining.cpp:142:35: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (conflict_flag = _check_new_block_accepted(pblock)) {
~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
위해 밑에 소스코드의 조건문 중에 "=" 를 "==" 로 수정하다가 발생한 에러임. 일단은 warning보단 error를 해결하는 식으로 해서 결론적으로 저 부분의 warning은 해결하지 못함.
while (pblock->nNonce < std::numeric_limits<uint32_t>::max() && !CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus()) && !ShutdownRequested()) {
++pblock->nNonce;
if(n_tries >= HASHTRY_INTERVAL) {
usleep(n_tries * USEC_PER_HASH);
n_tries = 0;
if (conflict_flag = _check_new_block_accepted(pblock)) {
break;
}
}
n_tries++;
}
3rd party 모듈 (bitcoin, bdb 등)에서 발생하는 warning은 우선순위가 낮을 것 같습니다. 안건드리는게 나을수도 있고요.
저희가 작성한 BLEEP이나 shadow부분에서 발생하는 warning 위주로 보시면 좋을것 같습니다. CMake 시에 발생하는 warning도 포함해서요.