1

私はPlatformIO issue #119に取り組んでおり、ESP8266 SoC のファームウェアをビルドしようとしていますが、奇妙な問題があります。プロジェクトをいくつかのオブジェクト ファイルにリンクすることと、プロジェクトを静的ライブラリ (lib.a) にアーカイブされているこれらのオブジェクト ファイルにリンクすることの違いを理解するのを手伝ってもらえますか?

例えば:

> ~/.platformio/packages/toolchain-xtensa/bin/xtensa-lx106-elf-g++ -o .pioenvs/esp01_8266/firmware.elf -nostdlib -Wl,--no-check-section -u call_user_start -Wl,-static -T ~/.platformio/packages/ldscripts/script.ld .pioenvs/esp01_8266/src/piomain.o -L~/.platformio/packages/sdk-esp8266/lib -L.pioenvs/esp01_8266 -Wl,--start-group .pioenvs/esp01_8266/libESP8266WebServer.a .pioenvs/esp01_8266/libESP8266WiFi.a -lpp -lmain -lwpa -llwip -lnet80211 -lphy -lhal  -lgcc -lc -Wl,--end-group

".pioenvs/esp01_8266/libESP8266WebServer.a" と ".pioenvs/esp01_8266/libESP8266WiFi.a" を *.obj ファイルに置き換えると、ファームウェアが動作します。

~/.platformio/packages/toolchain-xtensa/bin/xtensa-lx106-elf-g++ -o .pioenvs/esp01_8266/firmware.elf -nostdlib -Wl,--no-check-section -u call_user_start -Wl,-static -T ~/.platformio/packages/ldscripts/esp8266.ld .pioenvs/esp01_8266/src/piomain.o -L~/.platformio/packages/sdk-esp8266/lib -L.pioenvs/esp01_8266 -Wl,--start-group .pioenvs/esp01_8266/ESP8266WebServer/ESP8266WebServer.o .pioenvs/esp01_8266/ESP8266WiFi/ESP8266WiFi.o .pioenvs/esp01_8266/ESP8266WiFi/WiFiClient.o .pioenvs/esp01_8266/ESP8266WiFi/WiFiServer.o .pioenvs/esp01_8266/ESP8266WiFi/WiFiUdp.o  -lpp -lmain -lwpa -llwip -lnet80211 -lphy -lhal -lgcc -lc -Wl,--end-group

PS: どちらの場合も、ファームウェアはリンカーのエラーなしで適切にコンパイルされます。ただし、2 番目のアプローチ (lib.a の代わりに *.objs を使用) のみがデバイスで機能します。

4

0 に答える 0