g++: internal compiler error: Killed (program cc1plus)追了一會兒後,才發現自己編譯 boost 1.54.0 也碰過這種事,查看 dmesg 有類似的訊息:
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
Out of memory: Kill process 5309 (cc1plus) score 327 or sacrifice child
Killed process 5309 (cc1plus) total-vm:720204kB, anon-rss:18672kB, file-rss:8kB
例如編譯 boost 1.54.0:
~/boost_1_54_0$ "g++" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pthread -fPIC -fno-strict-aliasing -ftemplate-depth-1024 -DBOOST_ALL_NO_LIB=1 -DBOOST_CHRONO_DYN_LINK=1 -DBOOST_DATE_TIME_DYN_LINK=1 -DBOOST_FILESYSTEM_DYN_LINK=1 -DBOOST_LOG_DYN_LINK=1 -DBOOST_LOG_SETUP_BUILDING_THE_LIB=1 -DBOOST_LOG_SETUP_DLL -DBOOST_LOG_USE_NATIVE_SYSLOG -DBOOST_LOG_USE_SSSE3 -DBOOST_LOG_WITHOUT_EVENT_LOG -DBOOST_SPIRIT_USE_PHOENIX_V3=1 -DBOOST_SYSTEM_DYN_LINK=1 -DBOOST_SYSTEM_NO_DEPRECATED -DBOOST_THREAD_BUILD_DLL=1 -DBOOST_THREAD_DONT_USE_CHRONO=1 -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_DLL=1 -DDATE_TIME_INLINE -DNDEBUG -I"." -c -o "bin.v2/libs/log/build/gcc-4.6/release/build-no/log-api-unix/threading-multi/settings_parser.o" "libs/log/src/settings_parser.cpp"
噴訊息:
virtual memory exhausted: Cannot allocate memory
增加 stack-size 後 (-Wl,--stack=0x2000000),即可解決:
~/boost_1_54_0$ "g++" -Wl,--stack=0x2000000 -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pthread -fPIC -fno-strict-aliasing -ftemplate-depth-1024 -DBOOST_ALL_NO_LIB=1 -DBOOST_CHRONO_DYN_LINK=1 -DBOOST_DATE_TIME_DYN_LINK=1 -DBOOST_FILESYSTEM_DYN_LINK=1 -DBOOST_LOG_DYN_LINK=1 -DBOOST_LOG_SETUP_BUILDING_THE_LIB=1 -DBOOST_LOG_SETUP_DLL -DBOOST_LOG_USE_NATIVE_SYSLOG -DBOOST_LOG_USE_SSSE3 -DBOOST_LOG_WITHOUT_EVENT_LOG -DBOOST_SPIRIT_USE_PHOENIX_V3=1 -DBOOST_SYSTEM_DYN_LINK=1 -DBOOST_SYSTEM_NO_DEPRECATED -DBOOST_THREAD_BUILD_DLL=1 -DBOOST_THREAD_DONT_USE_CHRONO=1 -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_DLL=1 -DDATE_TIME_INLINE -DNDEBUG -I"." -c -o "bin.v2/libs/log/build/gcc-4.6/release/build-no/log-api-unix/threading-multi/settings_parser.o" "libs/log/src/settings_parser.cpp"
對於編譯 boost 時,或許可以這樣用(更正確的用法應該是 LD_FLAGS):
~/boost_1_54_0$ ./bootstrap.sh
~/boost_1_54_0$ CXX="g++ -Wl,--stack=0x2000000" ./b2 -j2
沒有留言:
張貼留言