मैं एक ARM Cortex एम 3 (मेपल मिनी) के लिए Gentoo में सी ++ crosscompiling हूँ, लेकिन लगता है का आकार कम स्मृति संसाधनों के साथ एक छत मारा है, जब योगिनी फ़ाइल.rodata
/usr/libexec/gcc/arm-none-eabi/ld: build/maple_mini.elf section `.rodata' will not fit in region `rom'
/usr/libexec/gcc/arm-none-eabi/ld: region `rom' overflowed by 1508 bytes
जोड़ने यह पोस्ट elf-file के लिंक को पूरा करने में सक्षम होने के लिए .rodata की सामग्री के आकार को कम करने के तरीके के बारे में एक प्रश्न है।
मैंने शामिल कोड को तोड़ दिया है, और निम्नलिखित प्रासंगिक विकल्पों के साथ संकलित कर रहा हूं।
CXXFLAGS = -fno-rtti -fno-exceptions -Os -fdata-sections -ffunction-sections -Wl,-gc-sections ...
LDFLAGS = -Wl,-gc-sections -fno-exceptions -fno-rtti ...
फिर भी, नक्शे-फ़ाइल में .rodata (जिसके साथ मैं काफी अपरिचित हूँ) शामिल हैं क्या कार्यक्रम में कक्षाओं से प्रत्येक के लिए प्रकार की जानकारी किसी तरह का हो रहा है। कुछ नक्शा फाइल अंश
0x000000000801d6c0 0x28 .../libsyrup.a(MPU6050.o)
0x000000000801d6c0 _ZTVN5syrup6SensorILi6EEE
.rodata._ZTVN5syrup11SuperSensorILi6EEE 0x000000000801d6e8 0x28 .../libsyrup.a(MPU6050.o)
0x000000000801d6e8 _ZTVN5syrup11SuperSensorILi6EEE
.rodata._ZTVN5syrup7MPU6050E 0x000000000801d710 0x28 .../libsyrup.a(MPU6050.o)
0x000000000801d710 _ZTVN5syrup7MPU6050E
.rodata._ZTVN5syrup6SensorILi1EEE
0x000000000801d738 0x28 .../libsyrup.a(MS5611.o)
0x000000000801d738 _ZTVN5syrup6SensorILi1EEE
.rodata._ZTVN5syrup11SuperSensorILi1EEE
0x000000000801d760 0x28 .../libsyrup.a(MS5611.o)
0x000000000801d760 _ZTVN5syrup11SuperSensorILi1EEE
...
0x000000000801ee24 0x6f3 .../libstdc++.a(cp-demangle.o)
0x730 (size before relaxing)
*fill* 0x000000000801f517 0x1
.rodata 0x000000000801f518 0x14 .../libgcc.a(unwind-arm.o)
.rodata 0x000000000801f52c 0x23c .../libc.a(lib_a-strerror.o)
.rodata.str1.4 0x000000000801f768 0x635 .../libc.a(lib_a-strerror.o)
0x63c (size before relaxing)
तो, lib_a-strerror.o और CP-demangle.o (ध्यान दें। MPU6050 एक SuperSensor <> जो एक सेंसर < है>, एक C++ भावना है) ऐसा लगता है कि अधिकतर जगह क्या होती है, हालांकि मुझे लगता है कि ये काफी महत्वपूर्ण हैं।
तो, मेरा सवाल यह है कि, कोडोडा अनुभाग को कम करने (या कोड को पुन: स्थापित करने) के लिए और क्या कदम उठाए जा सकते हैं, और वहां वास्तव में क्या संग्रहीत किया जाता है? किसी भी सुझाव का स्वागत है! मैं संकलन और लिंकिंग के गहरे कामकाज के लिए बिल्कुल नया हूं, लेकिन सीख रहा हूं।
ये सी और सी ++ रनटाइम पुस्तकालयों से जुड़े त्रुटि संदेश स्ट्रिंग हैं। वे उपयोगकर्ता को बताते हैं कि आपका प्रोग्राम क्रैश क्यों हुआ। उनसे छुटकारा पाने के लिए रनटाइम पुस्तकालयों को फिर से लिखना होगा, बिल्कुल व्यावहारिक नहीं, लेकिन यह किया गया है। –